智慧北京开发第五天(上)

ShareSDK介绍

进入官网学习:
http://www.mob.com
根据向导添加app
智慧北京开发第五天(上)_第1张图片
快速继承SDK,并下载解压:
智慧北京开发第五天(上)_第2张图片
双击运行QuickIntegrater.jar

生成wisdombj文件夹,并将其拷入我们的项目中去。
智慧北京开发第五天(上)_第3张图片
将生产的wisdombj中的文件移植到我们的工程中,文件目录如下:

最好在重启下AndroidStudio,让我构建的代码在Gradle文件中生效。
然后根据官网教程:
http://dashboard.mob.com/#/main/quickstarts/share/android
在我们的工程中设置代码:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xbmu.wisdombj">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/icon_150"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".SplashActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".GuideActivity"
            android:label="@string/title_activity_guide"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main"
            android:theme="@style/Theme.PageIndicatorDefaults" />
        <activity
            android:name=".NewsDetailActivity"
            android:label="@string/title_activity_news_detail"
            android:theme="@style/AppTheme.NoActionBar"></activity>

        <!--Shared SDK-->
        <activity
            android:name="com.mob.tools.MobUIShell"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:windowSoftInputMode="stateHidden|adjustResize">
            <intent-filter>
                <data android:scheme="tencent100371282" />
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <!--微信分享回调 -->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait" />

    </application>

</manifest>
NewsDetailActivity.java
 @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_back:
                finish();
                break;
            case R.id.btn_size:
                showChooseDialog();
                break;
            case R.id.btn_share:
                showShare();
                break;

        }
    }
    /**
     * 分享, 注意在sdcard根目录放test.jpg
     */
    private void showShare1() {
        ShareSDK.initSDK(this);
        OnekeyShare oks = new OnekeyShare();

        oks.setTheme(OnekeyShareTheme.SKYBLUE);//设置天蓝色的主题

        // 关闭sso授权
        oks.disableSSOWhenAuthorize();

        // 分享时Notification的图标和文字
        oks.setNotification(R.drawable.mm,
                getString(R.string.app_name));
        // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
        oks.setTitle(getString(R.string.share));
        // titleUrl是标题的网络链接,仅在人人网和QQ空间使用
        oks.setTitleUrl("http://sharesdk.cn");
        // text是分享文本,所有平台都需要这个字段
        oks.setText("我是分享文本");
        // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
        oks.setImagePath("/sdcard/test.jpg");// 确保SDcard下面存在此张图片
        // url仅在微信(包括好友和朋友圈)中使用
        oks.setUrl("http://sharesdk.cn");
        // comment是我对这条分享的评论,仅在人人网和QQ空间使用
        oks.setComment("我是测试评论文本");
        // site是分享此内容的网站名称,仅在QQ空间使用
        oks.setSite(getString(R.string.app_name));
        // siteUrl是分享此内容的网站地址,仅在QQ空间使用
        oks.setSiteUrl("http://sharesdk.cn");

        // 启动分享GUI
        oks.show(this);
    }
    /**
     * 分享, 注意在sdcard根目录放test.jpg
     */
    private void showShare(){
        ShareSDK.initSDK(this);
        OnekeyShare oks = new OnekeyShare();
        oks.setTheme(OnekeyShareTheme.SKYBLUE);//设置主题样式为天空蓝
        // 分享时Notification的图标和文字
        oks.setNotification(R.drawable.mm, getString(R.string.app_name));

        oks.setText("我是分享文本");
        oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/05/21/oESpJ78_533x800.jpg");
        // 启动分享GUI
        oks.show(this);
    }
运行效果:

代码没有问题,可以实现的。只不过我使用的是genymotion模拟器,没有进行联网设置(我尝试了好多种联网设置多没有用,希望那路大神知道,提供下方法)。

缓存介绍

CacheUtils.java
package com.xbmu.wisdombj.utils;

import android.content.Context;

/**
 * 缓存工具类
 * Created by Administrator on 2016/2/12 0012.
 */
public class CacheUtils {
    /**
     * 设置缓存  key是url,value是json
     * @param ctx
     * @param key
     * @param value
     */
    public static void setCache(Context ctx,String key,String value){
        SharePreferenceUtils.getString(ctx,key,value);
        //可以将缓存放在文件中,文件名是MD5(url),文件内容是json
    }

    /**
     * 获取缓存key是url
     * @param ctx
     * @param key
     * @return
     */
    public static String getCache(Context ctx,String key){
        return SharePreferenceUtils.getString(ctx,key,null);
    }
}
TabDetailPager.java
 @Override
    public void initData() {
        super.initData();
        String cache = CacheUtils.getCache(mActivity,mUrl);
        if(!TextUtils.isEmpty(cache)){
            paserData(cache,false);
        }
        getDataFromServer();

    }

/**
     * 从服务器获取数据
     */
    public void getDataFromServer() {

        HttpUtils httpUtils = new HttpUtils();
        httpUtils.send(HttpMethod.GET, mUrl, new RequestCallBack<String>() {

            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                String result = responseInfo.result;
                System.out.print("从网络获取的子页签详情数据:" + result);

                //解析数据
                paserData(result, false);

                //接口访问完后(请求完数据后),收起下拉刷新控件
                lvTabList.onRefreshComplete(true);

                //设置缓存
                CacheUtils.setCache(mActivity,mUrl,result);
            }

            @Override
            public void onFailure(HttpException e, String msg) {
                Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT).show();
                e.printStackTrace();
                //接口访问完后(请求完数据后),收起下拉刷新控件
                lvTabList.onRefreshComplete(false);
            }
        });
    }

自动轮播条(头条新闻自动轮播)

TabDetailPager.java
/**
     * 解析数据
     *
     * @param result
     */
    private void paserData(String result, boolean isMore) {
        Gson gson = new Gson();
        tabData = gson.fromJson(result, TabData.class);

        //处理下一页链接
        String more = tabData.data.more;
        if (!TextUtils.isEmpty(more)) {
            mMoreUrl = GlobalVariables.BASE_URL + more;
        } else {
            mMoreUrl = null;
        }
        if (!isMore) {
            topNewsDatas = tabData.data.topnews;
            tabNewsDatas = tabData.data.news;
            if (topNewsDatas != null) {
                vpTabPagerTop.setAdapter(new NewsTopAdapter());
                indicator.setOnPageChangeListener(this);
                indicator.setSnap(true);//支持快照显示
                indicator.onPageSelected(0);//让指示器重新定位到第一个点
                indicator.setViewPager(vpTabPagerTop);

                tvNewsTitle.setText(topNewsDatas.get(0).title);
            }

            if (tabNewsDatas != null) {
                newsItemAdapter = new NewsItemAdapter();
                lvTabList.setAdapter(newsItemAdapter);
            }

            //自动轮播显示
            if(mHandler == null){
                mHandler = new Handler(){
                    @Override
                    public void handleMessage(Message msg) {
                        super.handleMessage(msg);
                        int currentItem = vpTabPagerTop.getCurrentItem();
                        if(currentItem < topNewsDatas.size() - 1){
                            currentItem ++;
                        }else{
                            currentItem = 0;
                        }
                        vpTabPagerTop.setCurrentItem(currentItem);//切换到下一个页面
                        mHandler.sendEmptyMessageDelayed(0,3000);//延迟3秒后发消息,形成循环

                    }
                };
                mHandler.sendEmptyMessageDelayed(0,3000);//延迟3秒后发消息
            }

        } else {
            //如果是加载下一页,需要将数据追加给原来的集合
            ArrayList<TabNewsData> news = tabData.data.news;
            tabNewsDatas.addAll(news);
            newsItemAdapter.notifyDataSetChanged();

        }
    }
运行效果:

轮播条触摸监听

TabDetailPager.java
/**
     * 新闻头条适配器
     */
    private class NewsTopAdapter extends PagerAdapter {
        private BitmapUtils bitmapUtils;

        public NewsTopAdapter() {
            bitmapUtils = new BitmapUtils(mActivity);
            bitmapUtils.configDefaultLoadingImage(R.drawable.topnews_item_default);//设置默认图片
        }

        @Override
        public int getCount() {
            return topNewsDatas.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView imageView = new ImageView(mActivity);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);//基于控件大小填充图片
            topNewsData = topNewsDatas.get(position);
            bitmapUtils.display(imageView, topNewsData.topimage);//传递imageView对象和图片地址
            container.addView(imageView);

            imageView.setOnTouchListener(new TopNewsTouchListener());//设置触摸监听
            System.out.println("topNews:" + position);
            return imageView;
        }
        class TopNewsTouchListener implements View.OnTouchListener{

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        System.out.println("按下");
                        mHandler.removeCallbacksAndMessages(null);//删除handler中的所有消息
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        System.out.println("事件取消");
                        mHandler.sendEmptyMessageDelayed(0, 3000);
                        break;
                    case MotionEvent.ACTION_UP:
                        System.out.println("抬起");
                        mHandler.sendEmptyMessageDelayed(0,3000);
                        break;
                    default:
                        break;
                }
                return true;
            }
        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }
运行效果:
智慧北京开发第五天(上)_第4张图片
全部代码:
http://download.csdn.net/detail/btt2013/9430266


你可能感兴趣的:(智慧北京app)