使用share SDK实现第三方授权登录、分享综合(2.x版本)

StartActivity:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.home.testshare;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9.   
  10. public class StartActivity extends Activity implements OnClickListener {  
  11.     private Button authorizeBtn;  
  12.     private Button shareBtn;  
  13.   
  14.     @Override  
  15.     protected void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.start);  
  18.         initWidget();  
  19.     }  
  20.   
  21.     private void initWidget() {  
  22.         authorizeBtn = (Button) findViewById(R.id.start_btn_authorize);  
  23.         shareBtn = (Button) findViewById(R.id.start_btn_share);  
  24.         authorizeBtn.setOnClickListener(this);  
  25.         shareBtn.setOnClickListener(this);  
  26.     }  
  27.   
  28.     @Override  
  29.     public void onClick(View v) {  
  30.         if (v == authorizeBtn) {  
  31.             Intent intent = new Intent(this, AuthorizeActivity.class);  
  32.             startActivity(intent);  
  33.         } else if (v == shareBtn) {  
  34.             Intent intent = new Intent(this, ShareActivity.class);  
  35.             startActivity(intent);  
  36.         }  
  37.     }  
  38. }  

AuthorizeActivity:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.home.testshare;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7. import cn.sharesdk.douban.Douban;  
  8. import cn.sharesdk.dropbox.Dropbox;  
  9. import cn.sharesdk.evernote.Evernote;  
  10. import cn.sharesdk.facebook.Facebook;  
  11. import cn.sharesdk.flickr.Flickr;  
  12. import cn.sharesdk.foursquare.FourSquare;  
  13. import cn.sharesdk.framework.Platform;  
  14. import cn.sharesdk.framework.PlatformActionListener;  
  15. import cn.sharesdk.framework.ShareSDK;  
  16. import cn.sharesdk.instagram.Instagram;  
  17. import cn.sharesdk.kaixin.KaiXin;  
  18. import cn.sharesdk.linkedin.LinkedIn;  
  19. import cn.sharesdk.netease.microblog.NetEaseMicroBlog;  
  20. import cn.sharesdk.renren.Renren;  
  21. import cn.sharesdk.sina.weibo.SinaWeibo;  
  22. import cn.sharesdk.sohu.microblog.SohuMicroBlog;  
  23. import cn.sharesdk.sohu.suishenkan.SohuSuishenkan;  
  24. import cn.sharesdk.tencent.qzone.QZone;  
  25. import cn.sharesdk.tencent.weibo.TencentWeibo;  
  26. import cn.sharesdk.tumblr.Tumblr;  
  27. import cn.sharesdk.twitter.Twitter;  
  28. import cn.sharesdk.vkontakte.VKontakte;  
  29. import cn.sharesdk.youdao.YouDao;  
  30. import android.app.Activity;  
  31. import android.content.Intent;  
  32. import android.os.Bundle;  
  33. import android.os.Handler;  
  34. import android.os.Handler.Callback;  
  35. import android.os.Message;  
  36. import android.view.View;  
  37. import android.widget.AdapterView;  
  38. import android.widget.Toast;  
  39. import android.widget.AdapterView.OnItemClickListener;  
  40. import android.widget.ListView;  
  41.   
  42. public class AuthorizeActivity extends Activity implements OnItemClickListener,  
  43.         PlatformActionListener, Callback {  
  44.     private ListView listView;  
  45.     private String[] names;  
  46.     private Handler handler;  
  47.   
  48.     @Override  
  49.     protected void onCreate(Bundle savedInstanceState) {  
  50.         super.onCreate(savedInstanceState);  
  51.         setContentView(R.layout.authorize);  
  52.         ShareSDK.initSDK(this);  
  53.         handler = new Handler(this);  
  54.         listView = (ListView) findViewById(R.id.authorize_lv);  
  55.         listView.setOnItemClickListener(this);  
  56.         initData();  
  57.     }  
  58.   
  59.     @Override  
  60.     protected void onDestroy() {  
  61.         super.onDestroy();  
  62.         ShareSDK.stopSDK(this);  
  63.     }  
  64.   
  65.     /** 
  66.      * 初始化ListView数据 
  67.      */  
  68.     private void initData() {  
  69.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  70.         names = new String[] { SinaWeibo.NAME, TencentWeibo.NAME, QZone.NAME,  
  71.                 Renren.NAME, KaiXin.NAME, SohuMicroBlog.NAME,  
  72.                 NetEaseMicroBlog.NAME, Douban.NAME, Evernote.NAME, YouDao.NAME,  
  73.                 Facebook.NAME, Twitter.NAME, LinkedIn.NAME, Dropbox.NAME,  
  74.                 Flickr.NAME, FourSquare.NAME, Instagram.NAME,  
  75.                 SohuSuishenkan.NAME, Tumblr.NAME, VKontakte.NAME };  
  76.         int[] imageIds = new int[] { R.drawable.logo_sinaweibo,  
  77.                 R.drawable.logo_tencentweibo, R.drawable.logo_qzone,  
  78.                 R.drawable.logo_renren, R.drawable.logo_kaixin,  
  79.                 R.drawable.logo_sohumicroblog,  
  80.                 R.drawable.logo_neteasemicroblog, R.drawable.logo_douban,  
  81.                 R.drawable.logo_evernote, R.drawable.logo_youdao,  
  82.                 R.drawable.logo_facebook, R.drawable.logo_twitter,  
  83.                 R.drawable.logo_linkedin, R.drawable.logo_dropbox,  
  84.                 R.drawable.logo_flickr, R.drawable.logo_foursquare,  
  85.                 R.drawable.logo_instagram, R.drawable.logo_sohusuishenkan,  
  86.                 R.drawable.logo_tumblr, R.drawable.logo_vkontakte };  
  87.         for (int i = 0; i < names.length; i++) {  
  88.             Map<String, Object> map = new HashMap<String, Object>();  
  89.             map.put("name", names[i]);  
  90.             map.put("image", imageIds[i]);  
  91.             list.add(map);  
  92.         }  
  93.         MyAdapter adapter = new MyAdapter(this, list);  
  94.         listView.setAdapter(adapter);  
  95.     }  
  96.   
  97.     @Override  
  98.     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {  
  99.         Platform plat = ShareSDK.getPlatform(this, names[arg2]);  
  100.         plat.setPlatformActionListener(this);  
  101.         plat.showUser(null);  
  102.     }  
  103.   
  104.     @Override  
  105.     public boolean handleMessage(Message msg) {  
  106.         Platform plat = (Platform) msg.obj;  
  107.         switch (msg.arg1) {  
  108.         case 1: { // success  
  109.             Toast.makeText(this, plat.getName() + "授权成功", Toast.LENGTH_SHORT)  
  110.                     .show();  
  111.         }  
  112.             break;  
  113.         case 2: { // error  
  114.             Toast.makeText(this, plat.getName() + "授权失败", Toast.LENGTH_SHORT)  
  115.                     .show();  
  116.             return false;  
  117.         }  
  118.         case 3: { // cancel  
  119.             Toast.makeText(this, plat.getName() + "授权取消", Toast.LENGTH_SHORT)  
  120.                     .show();  
  121.             return false;  
  122.         }  
  123.         }  
  124.         Intent intent = new Intent(AuthorizeActivity.this, MainActivity.class);  
  125.         intent.putExtra("name", plat.getName());  
  126.         startActivity(intent);  
  127.         return false;  
  128.     }  
  129.   
  130.     @Override  
  131.     public void onCancel(Platform plat, int arg1) {  
  132.         Message msg = new Message();  
  133.         msg.arg1 = 3;  
  134.         msg.obj = plat;  
  135.         handler.sendMessage(msg);  
  136.     }  
  137.   
  138.     @Override  
  139.     public void onComplete(Platform plat, int arg1, HashMap<String, Object> arg2) {  
  140.         Message msg = new Message();  
  141.         msg.arg1 = 1;  
  142.         msg.obj = plat;  
  143.         handler.sendMessage(msg);  
  144.     }  
  145.   
  146.     @Override  
  147.     public void onError(Platform plat, int arg1, Throwable t) {  
  148.         t.printStackTrace();  
  149.         Message msg = new Message();  
  150.         msg.arg1 = 2;  
  151.         msg.obj = plat;  
  152.         handler.sendMessage(msg);  
  153.     }  
  154. }  

ShareActivity:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.home.testshare;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.util.HashMap;  
  6.   
  7. import cn.sharesdk.framework.Platform;  
  8. import cn.sharesdk.framework.PlatformActionListener;  
  9. import cn.sharesdk.framework.ShareSDK;  
  10. import cn.sharesdk.onekeyshare.OnekeyShare;  
  11. import cn.sharesdk.renren.Renren;  
  12. import cn.sharesdk.sina.weibo.SinaWeibo;  
  13. import cn.sharesdk.tencent.qzone.QZone;  
  14. import cn.sharesdk.tencent.weibo.TencentWeibo;  
  15.   
  16. import android.app.Activity;  
  17. import android.graphics.Bitmap;  
  18. import android.graphics.BitmapFactory;  
  19. import android.graphics.Bitmap.CompressFormat;  
  20. import android.os.Bundle;  
  21. import android.os.Environment;  
  22. import android.view.View;  
  23. import android.view.View.OnClickListener;  
  24. import android.widget.Button;  
  25.   
  26. public class ShareActivity extends Activity implements OnClickListener {  
  27.     private Button noUIBtn;  
  28.     private Button hasUIBtn;  
  29.     public static String TEST_IMAGE;  
  30.     private Button QQZoneBtn;  
  31.     private Button txweiboBtn;  
  32.     private Button sinaBtn;  
  33.     private Button renrenBtn;  
  34.   
  35.     @Override  
  36.     protected void onCreate(Bundle savedInstanceState) {  
  37.         super.onCreate(savedInstanceState);  
  38.         setContentView(R.layout.share);  
  39.         ShareSDK.initSDK(this);  
  40.         initWidget();  
  41.         initImage();  
  42.     }  
  43.   
  44.     private void initWidget() {  
  45.         noUIBtn = (Button) findViewById(R.id.share_btn_all_noUI);  
  46.         hasUIBtn = (Button) findViewById(R.id.share_btn_all_hasUI);  
  47.         QQZoneBtn = (Button) findViewById(R.id.share_btn_Qzone);  
  48.         txweiboBtn = (Button) findViewById(R.id.share_btn_txweibo);  
  49.         sinaBtn = (Button) findViewById(R.id.share_btn_sinaweibo);  
  50.         renrenBtn = (Button) findViewById(R.id.share_btn_renren);  
  51.         noUIBtn.setOnClickListener(this);  
  52.         hasUIBtn.setOnClickListener(this);  
  53.         QQZoneBtn.setOnClickListener(this);  
  54.         txweiboBtn.setOnClickListener(this);  
  55.         sinaBtn.setOnClickListener(this);  
  56.         renrenBtn.setOnClickListener(this);  
  57.     }  
  58.   
  59.     @Override  
  60.     public void onClick(View v) {  
  61.         if (v == noUIBtn) {  
  62.             showShare(truenull);  
  63.         } else if (v == hasUIBtn) {  
  64.             showShare(falsenull);  
  65.         } else if (v == QQZoneBtn) {  
  66.             showShare(false, QZone.NAME);  
  67.         } else if (v == txweiboBtn) {  
  68.             showShare(false, TencentWeibo.NAME);  
  69.         } else if (v == sinaBtn) {  
  70.             showShare(false, SinaWeibo.NAME);  
  71.         } else if (v == renrenBtn) {  
  72.             showShare(false, Renren.NAME);  
  73.         }  
  74.     }  
  75.   
  76.     private void showShare(boolean silent, String platform) {  
  77.         final OnekeyShare oks = new OnekeyShare();  
  78.         oks.setNotification(R.drawable.ic_launcher,  
  79.                 this.getString(R.string.app_name));  
  80.         oks.setAddress("12345678901");  
  81.         oks.setTitle(this.getString(R.string.evenote_title));  
  82.         oks.setTitleUrl("http://sharesdk.cn");  
  83.         oks.setText(this.getString(R.string.share_content));  
  84.         oks.setImagePath(TEST_IMAGE);  
  85.         oks.setImageUrl("http://img.appgo.cn/imgs/sharesdk/content/2013/07/25/1374723172663.jpg");  
  86.         oks.setUrl("http://www.sharesdk.cn");  
  87.         oks.setFilePath(TEST_IMAGE);  
  88.         oks.setComment(this.getString(R.string.share));  
  89.         oks.setSite(this.getString(R.string.app_name));  
  90.         oks.setSiteUrl("http://sharesdk.cn");  
  91.         oks.setVenueName("ShareSDK");  
  92.         oks.setVenueDescription("This is a beautiful place!");  
  93.         oks.setLatitude(23.056081f);  
  94.         oks.setLongitude(113.385708f);  
  95.         oks.setSilent(silent);  
  96.         if (platform != null) {  
  97.             oks.setPlatform(platform);  
  98.         }  
  99.   
  100.         // 去除注释,可令编辑页面显示为Dialog模式  
  101.         // oks.setDialogMode();  
  102.   
  103.         // 去除注释,在自动授权时可以禁用SSO方式  
  104.         // oks.disableSSOWhenAuthorize();  
  105.   
  106.         // 去除注释,则快捷分享的操作结果将通过OneKeyShareCallback回调  
  107.         // oks.setCallback(new OneKeyShareCallback());  
  108.   
  109.         // 去除注释,演示在九宫格添加自定义的图标  
  110.         // Bitmap logo = BitmapFactory.decodeResource(getResources(),  
  111.         // R.drawable.ic_launcher);  
  112.         // String label = getString(R.string.app_name);  
  113.         // OnClickListener listener = new OnClickListener() {  
  114.         // public void onClick(View v) {  
  115.         // String text = "Customer Logo -- ShareSDK "  
  116.         // + ShareSDK.getSDKVersionName();  
  117.         // Toast.makeText(ShareActivity.this, text, Toast.LENGTH_SHORT)  
  118.         // .show();  
  119.         // oks.finish();  
  120.         // }  
  121.         // };  
  122.         // oks.setCustomerLogo(logo, label, listener);  
  123.   
  124.         oks.show(this);  
  125.     }  
  126.   
  127.     private void initImage() {  
  128.         try {  
  129.             if (Environment.MEDIA_MOUNTED.equals(Environment  
  130.                     .getExternalStorageState())  
  131.                     && Environment.getExternalStorageDirectory().exists()) {  
  132.                 File baseFile = new File(  
  133.                         Environment.getExternalStorageDirectory(), "share");  
  134.                 if (!baseFile.exists()) {  
  135.                     baseFile.mkdir();  
  136.                 }  
  137.                 TEST_IMAGE = baseFile.getAbsolutePath() + "/picture.png";  
  138.             } else {  
  139.                 TEST_IMAGE = getApplication().getFilesDir().getAbsolutePath()  
  140.                         + "/picture.png";  
  141.             }  
  142.             File file = new File(TEST_IMAGE);  
  143.             if (!file.exists()) {  
  144.                 file.createNewFile();  
  145.                 Bitmap pic = BitmapFactory.decodeResource(getResources(),  
  146.                         R.drawable.picture);  
  147.                 FileOutputStream fos = new FileOutputStream(file);  
  148.                 pic.compress(CompressFormat.JPEG, 100, fos);  
  149.                 fos.flush();  
  150.                 fos.close();  
  151.             }  
  152.         } catch (Throwable t) {  
  153.             t.printStackTrace();  
  154.             TEST_IMAGE = null;  
  155.         }  
  156.     }  
  157.   
  158.     class OneKeyShareCallback implements PlatformActionListener {  
  159.   
  160.         public void onComplete(Platform plat, int action,  
  161.                 HashMap<String, Object> res) {  
  162.             System.out.println(res.toString());  
  163.             // 在这里添加分享成功的处理代码  
  164.         }  
  165.   
  166.         public void onError(Platform plat, int action, Throwable t) {  
  167.             t.printStackTrace();  
  168.             // 在这里添加分享失败的处理代码  
  169.         }  
  170.   
  171.         public void onCancel(Platform plat, int action) {  
  172.             // 在这里添加取消分享的处理代码  
  173.         }  
  174.     }  
  175. }  

MainActivity:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.home.testshare;  
  2.   
  3. import java.util.HashMap;  
  4.   
  5. import android.app.Activity;  
  6. import android.content.Intent;  
  7. import android.os.Bundle;  
  8. import android.os.Handler;  
  9. import android.os.Handler.Callback;  
  10. import android.os.Message;  
  11. import android.view.View;  
  12. import android.view.View.OnClickListener;  
  13. import android.widget.Button;  
  14. import android.widget.Toast;  
  15. import cn.sharesdk.framework.Platform;  
  16. import cn.sharesdk.framework.PlatformActionListener;  
  17. import cn.sharesdk.framework.ShareSDK;  
  18.   
  19. public class MainActivity extends Activity implements OnClickListener,  
  20.         PlatformActionListener, Callback {  
  21.     private Button getInfoBtn;  
  22.     private Button logoutBtn;  
  23.     private String platName;  
  24.     private Handler handler;  
  25.   
  26.     @Override  
  27.     protected void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.main);  
  30.         initWidget();  
  31.         platName = getIntent().getStringExtra("name");  
  32.         handler = new Handler(this);  
  33.     }  
  34.   
  35.     private void initWidget() {  
  36.         getInfoBtn = (Button) findViewById(R.id.main_btn_getInfo);  
  37.         logoutBtn = (Button) findViewById(R.id.main_btn_logout);  
  38.         getInfoBtn.setOnClickListener(this);  
  39.         logoutBtn.setOnClickListener(this);  
  40.     }  
  41.   
  42.     @Override  
  43.     public void onClick(View v) {  
  44.         if (v == getInfoBtn) {  
  45.             if (platName == null || "".equals(platName)) {  
  46.                 Toast.makeText(this"获取信息失败", Toast.LENGTH_SHORT).show();  
  47.                 return;  
  48.             }  
  49.             Platform plat = ShareSDK.getPlatform(this, platName);  
  50.             plat.setPlatformActionListener(this);  
  51.             plat.showUser(null);  
  52.         } else if (v == logoutBtn) {  
  53.             if (platName == null || "".equals(platName)) {  
  54.                 Toast.makeText(this"注销失败", Toast.LENGTH_SHORT).show();  
  55.                 return;  
  56.             }  
  57.             Platform plat = ShareSDK.getPlatform(this, platName);  
  58.             if (plat != null && plat.isValid()) {  
  59.                 plat.removeAccount();  
  60.                 finish();  
  61.             }  
  62.         }  
  63.     }  
  64.   
  65.     public boolean handleMessage(Message msg) {  
  66.         switch (msg.arg1) {  
  67.         case 1: { // success  
  68.             Intent intent = new Intent(MainActivity.this,  
  69.                     ShowInfoActivity.class);  
  70.             intent.putExtra("data", String.valueOf(msg.obj));  
  71.             startActivity(intent);  
  72.         }  
  73.             break;  
  74.         case 2: {// error  
  75.             Platform plat = (Platform) msg.obj;  
  76.             Toast.makeText(this, plat.getName() + "授权失败", Toast.LENGTH_SHORT)  
  77.                     .show();  
  78.         }  
  79.             break;  
  80.         case 3: {// cancel  
  81.             Platform plat = (Platform) msg.obj;  
  82.             Toast.makeText(this, plat.getName() + "授权取消", Toast.LENGTH_SHORT)  
  83.                     .show();  
  84.         }  
  85.             break;  
  86.         }  
  87.         return false;  
  88.     }  
  89.   
  90.     @Override  
  91.     public void onCancel(Platform plat, int arg1) {  
  92.         Message msg = new Message();  
  93.         msg.arg1 = 3;  
  94.         msg.obj = plat;  
  95.         handler.sendMessage(msg);  
  96.     }  
  97.   
  98.     @Override  
  99.     public void onComplete(Platform arg0, int arg1, HashMap<String, Object> res) {  
  100.         Message msg = new Message();  
  101.         msg.arg1 = 1;  
  102.         JsonUtils ju = new JsonUtils();  
  103.         String json = ju.fromHashMap(res);  
  104.         msg.obj = ju.format(json);  
  105.         handler.sendMessage(msg);  
  106.     }  
  107.   
  108.     @Override  
  109.     public void onError(Platform plat, int arg1, Throwable arg2) {  
  110.         Message msg = new Message();  
  111.         msg.arg1 = 2;  
  112.         msg.obj = plat;  
  113.         handler.sendMessage(msg);  
  114.     }  
  115. }  

ShowInfoActivity:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.home.testshare;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.widget.TextView;  
  6.   
  7. public class ShowInfoActivity extends Activity {  
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.show_info);  
  12.         TextView show = (TextView) findViewById(R.id.show_info_tv);  
  13.         show.setText(getIntent().getStringExtra("data"));  
  14.     }  
  15. }  

MyAdapter:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.home.testshare;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import android.content.Context;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.BaseAdapter;  
  11. import android.widget.ImageView;  
  12. import android.widget.TextView;  
  13.   
  14. public class MyAdapter extends BaseAdapter {  
  15.     private Context context;  
  16.     private List<Map<String, Object>> list;  
  17.   
  18.     public MyAdapter(Context context, List<Map<String, Object>> list) {  
  19.         this.context = context;  
  20.         this.list = list;  
  21.     }  
  22.   
  23.     @Override  
  24.     public int getCount() {  
  25.         return list.size();  
  26.     }  
  27.   
  28.     @Override  
  29.     public Object getItem(int arg0) {  
  30.         return list.get(arg0);  
  31.     }  
  32.   
  33.     @Override  
  34.     public long getItemId(int arg0) {  
  35.         return arg0;  
  36.     }  
  37.   
  38.     @Override  
  39.     public View getView(int position, View arg1, ViewGroup arg2) {  
  40.         View view = LayoutInflater.from(context).inflate(R.layout.listview_row,  
  41.                 null);  
  42.         ImageView imageView = (ImageView) view  
  43.                 .findViewById(R.id.listview_row_iv);  
  44.         TextView textView = (TextView) view.findViewById(R.id.listview_row_tv);  
  45.         imageView.setBackgroundResource((Integer) list.get(position).get(  
  46.                 "image"));  
  47.         textView.setText((String) list.get(position).get("name"));  
  48.         return view;  
  49.     }  
  50.   
  51. }  

JsonUtils:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.home.testshare;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.Iterator;  
  6. import java.util.Map.Entry;  
  7. import org.json.JSONArray;  
  8. import org.json.JSONException;  
  9. import org.json.JSONObject;  
  10.   
  11. public class JsonUtils {  
  12.   
  13.     public HashMap<String, Object> fromJson(String jsonStr) {  
  14.         try {  
  15.             if (jsonStr.startsWith("[") && jsonStr.endsWith("]")) {  
  16.                 jsonStr = "{\"fakelist\":" + jsonStr + "}";  
  17.             }  
  18.   
  19.             JSONObject json = new JSONObject(jsonStr);  
  20.             return fromJson(json);  
  21.         } catch (Throwable t) {  
  22.             t.printStackTrace();  
  23.         }  
  24.         return new HashMap<String, Object>();  
  25.     }  
  26.   
  27.     private HashMap<String, Object> fromJson(JSONObject json)  
  28.             throws JSONException {  
  29.         HashMap<String, Object> map = new HashMap<String, Object>();  
  30.         @SuppressWarnings("unchecked")  
  31.         Iterator<String> iKey = json.keys();  
  32.         while (iKey.hasNext()) {  
  33.             String key = iKey.next();  
  34.             Object value = json.opt(key);  
  35.             if (JSONObject.NULL.equals(value)) {  
  36.                 value = null;  
  37.             }  
  38.             if (value != null) {  
  39.                 if (value instanceof JSONObject) {  
  40.                     value = fromJson((JSONObject) value);  
  41.                 } else if (value instanceof JSONArray) {  
  42.                     value = fromJson((JSONArray) value);  
  43.                 }  
  44.                 map.put(key, value);  
  45.             }  
  46.         }  
  47.         return map;  
  48.     }  
  49.   
  50.     private ArrayList<Object> fromJson(JSONArray array) throws JSONException {  
  51.         ArrayList<Object> list = new ArrayList<Object>();  
  52.         for (int i = 0, size = array.length(); i < size; i++) {  
  53.             Object value = array.opt(i);  
  54.             if (value instanceof JSONObject) {  
  55.                 value = fromJson((JSONObject) value);  
  56.             } else if (value instanceof JSONArray) {  
  57.                 value = fromJson((JSONArray) value);  
  58.             }  
  59.             list.add(value);  
  60.         }  
  61.         return list;  
  62.     }  
  63.   
  64.     public String fromHashMap(HashMap<String, Object> map) {  
  65.         try {  
  66.             return getJSONObject(map).toString();  
  67.         } catch (Throwable t) {  
  68.             t.printStackTrace();  
  69.         }  
  70.         return "";  
  71.     }  
  72.   
  73.     @SuppressWarnings("unchecked")  
  74.     private JSONObject getJSONObject(HashMap<String, Object> map)  
  75.             throws JSONException {  
  76.         JSONObject json = new JSONObject();  
  77.         for (Entry<String, Object> entry : map.entrySet()) {  
  78.             Object value = entry.getValue();  
  79.             if (value instanceof HashMap<?, ?>) {  
  80.                 value = getJSONObject((HashMap<String, Object>) value);  
  81.             } else if (value instanceof ArrayList<?>) {  
  82.                 value = getJSONArray((ArrayList<Object>) value);  
  83.             }  
  84.             json.put(entry.getKey(), value);  
  85.         }  
  86.         return json;  
  87.     }  
  88.   
  89.     @SuppressWarnings("unchecked")  
  90.     private JSONArray getJSONArray(ArrayList<Object> list) throws JSONException {  
  91.         JSONArray array = new JSONArray();  
  92.         for (Object value : list) {  
  93.             if (value instanceof HashMap<?, ?>) {  
  94.                 value = getJSONObject((HashMap<String, Object>) value);  
  95.             } else if (value instanceof ArrayList<?>) {  
  96.                 value = getJSONArray((ArrayList<Object>) value);  
  97.             }  
  98.             array.put(value);  
  99.         }  
  100.         return array;  
  101.     }  
  102.   
  103.     public String format(String jsonStr) {  
  104.         try {  
  105.             return format("", fromJson(jsonStr));  
  106.         } catch (Throwable t) {  
  107.             t.printStackTrace();  
  108.         }  
  109.         return "";  
  110.     }  
  111.   
  112.     @SuppressWarnings("unchecked")  
  113.     private String format(String sepStr, HashMap<String, Object> map) {  
  114.         StringBuffer sb = new StringBuffer();  
  115.         sb.append("{\n");  
  116.         String mySepStr = sepStr + "\t";  
  117.         int i = 0;  
  118.         for (Entry<String, Object> entry : map.entrySet()) {  
  119.             if (i > 0) {  
  120.                 sb.append(",\n");  
  121.             }  
  122.             sb.append(mySepStr).append('\"').append(entry.getKey())  
  123.                     .append("\":");  
  124.             Object value = entry.getValue();  
  125.             if (value instanceof HashMap<?, ?>) {  
  126.                 sb.append(format(mySepStr, (HashMap<String, Object>) value));  
  127.             } else if (value instanceof ArrayList<?>) {  
  128.                 sb.append(format(mySepStr, (ArrayList<Object>) value));  
  129.             } else if (value instanceof String) {  
  130.                 sb.append('\"').append(value).append('\"');  
  131.             } else {  
  132.                 sb.append(value);  
  133.             }  
  134.             i++;  
  135.         }  
  136.         sb.append('\n').append(sepStr).append('}');  
  137.         return sb.toString();  
  138.     }  
  139.   
  140.     @SuppressWarnings("unchecked")  
  141.     private String format(String sepStr, ArrayList<Object> list) {  
  142.         StringBuffer sb = new StringBuffer();  
  143.         sb.append("[\n");  
  144.         String mySepStr = sepStr + "\t";  
  145.         int i = 0;  
  146.         for (Object value : list) {  
  147.             if (i > 0) {  
  148.                 sb.append(",\n");  
  149.             }  
  150.             sb.append(mySepStr);  
  151.             if (value instanceof HashMap<?, ?>) {  
  152.                 sb.append(format(mySepStr, (HashMap<String, Object>) value));  
  153.             } else if (value instanceof ArrayList<?>) {  
  154.                 sb.append(format(mySepStr, (ArrayList<Object>) value));  
  155.             } else if (value instanceof String) {  
  156.                 sb.append('\"').append(value).append('\"');  
  157.             } else {  
  158.                 sb.append(value);  
  159.             }  
  160.             i++;  
  161.         }  
  162.         sb.append('\n').append(sepStr).append(']');  
  163.         return sb.toString();  
  164.     }  
  165.   
  166. }  

assets里面的ShareSDK.xml:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <DevInfor>  
  3.   
  4.     <!--  
  5.         说明:  
  6.           
  7.         1、表格中的第一项  
  8.             <ShareSDK   
  9.                 AppKey="api20" />  
  10.         是必须的,其中的AppKey是您在ShareSDK上注册的开发者帐号的AppKey  
  11.           
  12.         2、所有集成到您项目的平台都应该为其在表格中填写相对应的开发者信息,以新浪微博为例:  
  13.             <SinaWeibo  
  14.                 Id="1"  
  15.                 SortId="1"  
  16.                 AppKey="568898243"  
  17.                 AppSecret="38a4f8204cc784f81f9f0daaf31e02e3"  
  18.                 RedirectUrl="http://www.sharesdk.cn"  
  19.                 Enable="true" />  
  20.         其中的SortId是此平台在分享列表中的位置,由开发者自行定义,可以是任何整型数字,数值越大  
  21.         越靠后AppKey、AppSecret和RedirectUrl是您在新浪微博上注册开发者信息和应用后得到的信息  
  22.         Id是一个保留的识别符,整型,ShareSDK不使用此字段,供您在自己的项目中当作平台的识别符。  
  23.         Enable字段表示此平台是否有效,布尔值,默认为true,如果Enable为false,即便平台的jar包  
  24.         已经添加到应用中,平台实例依然不可获取。  
  25.           
  26.         各个平台注册应用信息的地址如下:  
  27.             新浪微博                 http://open.weibo.com  
  28.             腾讯微博                 http://dev.t.qq.com  
  29.             QQ空间                      http://connect.qq.com/intro/login/  
  30.             微信好友                 http://open.weixin.qq.com  
  31.             Facebook      https://developers.facebook.com  
  32.             Twitter       https://dev.twitter.com  
  33.             人人网                      http://dev.renren.com  
  34.             开心网                      http://open.kaixin001.com  
  35.             搜狐微博                 http://open.t.sohu.com  
  36.             网易微博                 http://open.t.163.com  
  37.             豆瓣                           http://developers.douban.com  
  38.             有道云笔记            http://note.youdao.com/open/developguide.html#app  
  39.             印象笔记                 https://dev.evernote.com/  
  40.             Linkedin      https://www.linkedin.com/secure/developer?newapp=  
  41.             FourSquare    https://developer.foursquare.com/  
  42.             搜狐随身看            https://open.sohu.com/  
  43.             Flickr        http://www.flickr.com/services/  
  44.             Pinterest     http://developers.pinterest.com/  
  45.             Tumblr        http://www.tumblr.com/developers  
  46.             Dropbox       https://www.dropbox.com/developers  
  47.             Instagram     http://instagram.com/developer#  
  48.             VKontakte     http://vk.com/dev  
  49.   
  50.     -->  
  51.   
  52.     <ShareSDK AppKey="androidv1101" />  
  53.  <!-- 修改成你在sharesdk后台注册的应用的appkey" -->  
  54.   
  55.     <SinaWeibo  
  56.         AppKey="568898243"  
  57.         AppSecret="38a4f8204cc784f81f9f0daaf31e02e3"  
  58.         Enable="true"  
  59.         Id="1"  
  60.         RedirectUrl="http://www.sharesdk.cn"  
  61.         SortId="1" />  
  62.   
  63.     <TencentWeibo  
  64.         AppKey="801307650"  
  65.         AppSecret="ae36f4ee3946e1cbb98d6965b0b2ff5c"  
  66.         Enable="true"  
  67.         Id="2"  
  68.         RedirectUri="http://sharesdk.cn"  
  69.         SortId="2" />  
  70.   
  71.     <QZone  
  72.         AppId="100371282"  
  73.         AppKey="aed9b0303e3ed1e27bae87c33761161d"  
  74.         Enable="true"  
  75.         Id="3"  
  76.         SortId="3" />  
  77.   
  78.     <!--  
  79.          Wechat微信和WechatMoments微信朋友圈的appid是一样的;  
  80.       
  81.                        注意:开发者不能用我们这两个平台的appid,否则分享不了  
  82.       
  83.           微信测试的时候,微信测试需要先签名打包出apk,  
  84.         sample测试微信,要先签名打包,keystore在sample项目中,密码123456  
  85.     -->  
  86.   
  87.     <Wechat  
  88.         AppId="wx4868b35061f87885"  
  89.         Enable="true"  
  90.         Id="4"  
  91.         SortId="4" />  
  92.   
  93.     <WechatMoments  
  94.         AppId="wx4868b35061f87885"  
  95.         Enable="true"  
  96.         Id="5"  
  97.         SortId="5" />  
  98.   
  99.     <WechatFavorite  
  100.         AppId="wx4868b35061f87885"  
  101.         Enable="true"  
  102.         Id="6"  
  103.         SortId="6" />  
  104.   
  105.     <QQ  
  106.         AppId="100371282"  
  107.         AppKey="aed9b0303e3ed1e27bae87c33761161d"  
  108.         Enable="true"  
  109.         Id="7"  
  110.         SortId="7" />  
  111.   
  112.     <Facebook  
  113.         ConsumerKey="107704292745179"  
  114.         ConsumerSecret="38053202e1a5fe26c80c753071f0b573"  
  115.         Enable="true"  
  116.         Id="8"  
  117.         SortId="8" />  
  118.   
  119.     <Twitter  
  120.         CallbackUrl="http://www.sharesdk.cn"  
  121.         ConsumerKey="mnTGqtXk0TYMXYTN7qUxg"  
  122.         ConsumerSecret="ROkFqr8c3m1HXqS3rm3TJ0WkAJuwBOSaWhPbZ9Ojuc"  
  123.         Enable="true"  
  124.         Id="9"  
  125.         SortId="9" />  
  126.   
  127.     <Renren  
  128.         ApiKey="fc5b8aed373c4c27a05b712acba0f8c3"  
  129.         AppId="226427"  
  130.         Enable="true"  
  131.         Id="10"  
  132.         SecretKey="f29df781abdd4f49beca5a2194676ca4"  
  133.         SortId="10" />  
  134.   
  135.     <KaiXin  
  136.         AppKey="358443394194887cee81ff5890870c7c"  
  137.         AppSecret="da32179d859c016169f66d90b6db2a23"  
  138.         Enable="true"  
  139.         Id="11"  
  140.         RedirectUri="http://www.sharesdk.cn"  
  141.         SortId="11" />  
  142.   
  143.     <Email  
  144.         Enable="true"  
  145.         Id="12"  
  146.         SortId="12" />  
  147.   
  148.     <ShortMessage  
  149.         Enable="true"  
  150.         Id="13"  
  151.         SortId="13" />  
  152.   
  153.     <SohuMicroBlog  
  154.         ApiKey="SAfmTG1blxZY3HztESWx"  
  155.         CallbackUrl="http://www.sharesdk.cn"  
  156.         ConsumerKey="SAfmTG1blxZY3HztESWx"  
  157.         ConsumerSecret="yfTZf)!rVwh*3dqQuVJVsUL37!F)!yS9S!Orcsij"  
  158.         Enable="true"  
  159.         Id="14"  
  160.         SortId="14" />  
  161.   
  162.     <NetEaseMicroBlog  
  163.         ConsumerKey="T5EI7BXe13vfyDuy"  
  164.         ConsumerSecret="gZxwyNOvjFYpxwwlnuizHRRtBRZ2lV1j"  
  165.         Enable="true"  
  166.         Id="15"  
  167.         RedirectUri="http://www.shareSDK.cn"  
  168.         SortId="15" />  
  169.   
  170.     <Douban  
  171.         ApiKey="02e2cbe5ca06de5908a863b15e149b0b"  
  172.         Enable="true"  
  173.         Id="16"  
  174.         RedirectUri="http://www.sharesdk.cn"  
  175.         Secret="9f1e7b4f71304f2f"  
  176.         SortId="16" />  
  177.   
  178.     <YouDao  
  179.         ConsumerKey="dcde25dca105bcc36884ed4534dab940"  
  180.         ConsumerSecret="d98217b4020e7f1874263795f44838fe"  
  181.         Enable="true"  
  182.         HostType="product"  
  183.         Id="17"  
  184.         RedirectUri="http://www.sharesdk.cn"  
  185.         SortId="17" />  
  186.   
  187.     <SohuSuishenkan  
  188.         AppKey="e16680a815134504b746c86e08a19db0"  
  189.         AppSecret="b8eec53707c3976efc91614dd16ef81c"  
  190.         Enable="true"  
  191.         Id="18"  
  192.         RedirectUri="http://sharesdk.cn"  
  193.         SortId="18" />  
  194.   
  195.     <!--  
  196.         在中国大陆,印象笔记有两个服务器,一个是沙箱(sandbox),一个是生产服务器(china)。  
  197.         一般你注册应用,它会先让你使用sandbox,当你完成测试以后,可以到  
  198.         http://dev.yinxiang.com/support/上激活你的ConsumerKey,激活成功后,修改HostType  
  199.         为china就好了。至于如果您申请的是国际版的印象笔记(Evernote),则其生产服务器类型为  
  200.         “product”。  
  201.           
  202.         如果目标设备上已经安装了印象笔记客户端,ShareSDK允许应用调用本地API来完成分享,但  
  203.         是需要将应用信息中的“ShareByAppClient”设置为true,此字段默认值为false。  
  204.   
  205.     -->  
  206.   
  207.     <Evernote  
  208.         ConsumerKey="sharesdk-7807"  
  209.         ConsumerSecret="d05bf86993836004"  
  210.         Enable="true"  
  211.         HostType="sandbox"  
  212.         Id="19"  
  213.         ShareByAppClient="true"  
  214.         SortId="19" />  
  215.   
  216.     <LinkedIn  
  217.         ApiKey="ejo5ibkye3vo"  
  218.         Enable="true"  
  219.         Id="20"  
  220.         RedirectUrl="http://sharesdk.cn"  
  221.         SecretKey="cC7B2jpxITqPLZ5M"  
  222.         SortId="20" />  
  223.   
  224.     <GooglePlus  
  225.         Enable="true"  
  226.         Id="21"  
  227.         SortId="21" />  
  228.   
  229.     <FourSquare  
  230.         ClientID="G0ZI20FM30SJAJTX2RIBGD05QV1NE2KVIM2SPXML2XUJNXEU"  
  231.         ClientSecret="3XHQNSMMHIFBYOLWEPONNV4DOTCDBQH0AEMVGCBG0MZ32XNU"  
  232.         Enable="true"  
  233.         Id="22"  
  234.         RedirectUrl="http://www.sharesdk.cn"  
  235.         SortId="22" />  
  236.   
  237.     <Pinterest  
  238.         ClientId="1432928"  
  239.         Enable="true"  
  240.         Id="23"  
  241.         SortId="23" />  
  242.   
  243.     <Flickr  
  244.         ApiKey="33d833ee6b6fca49943363282dd313dd"  
  245.         ApiSecret="3a2c5b42a8fbb8bb"  
  246.         Enable="true"  
  247.         Id="24"  
  248.         RedirectUri="http://www.sharesdk.cn"  
  249.         SortId="24" />  
  250.   
  251.     <Tumblr  
  252.         CallbackUrl="http://sharesdk.cn"  
  253.         Enable="true"  
  254.         Id="25"  
  255.         OAuthConsumerKey="2QUXqO9fcgGdtGG1FcvML6ZunIQzAEL8xY6hIaxdJnDti2DYwM"  
  256.         SecretKey="3Rt0sPFj7u2g39mEVB3IBpOzKnM3JnTtxX2bao2JKk4VV1gtNo"  
  257.         SortId="25" />  
  258.   
  259.     <Dropbox  
  260.         AppKey="7janx53ilz11gbs"  
  261.         AppSecret="c1hpx5fz6tzkm32"  
  262.         Enable="true"  
  263.         Id="26"  
  264.         SortId="26" />  
  265.   
  266.     <VKontakte  
  267.         ApplicationId="3921561"  
  268.         Enable="true"  
  269.         Id="27"  
  270.         SortId="27" />  
  271.   
  272.     <Instagram  
  273.         ClientId="ff68e3216b4f4f989121aa1c2962d058"  
  274.         ClientSecret="1b2e82f110264869b3505c3fe34e31a1"  
  275.         Enable="true"  
  276.         Id="28"  
  277.         RedirectUri="http://sharesdk.cn"  
  278.         SortId="28" />  
  279.   
  280.     <Yixin  
  281.         AppId="yx0d9a9f9088ea44d78680f3274da1765f"  
  282.         Enable="true"  
  283.         Id="29"  
  284.         SortId="29" />  
  285.     <!-- AppId="yx28eafabad0934f8d8d34a2a7238f53a0" -->  
  286.   
  287.     <YixinMoments  
  288.         AppId="yx0d9a9f9088ea44d78680f3274da1765f"  
  289.         Enable="true"  
  290.         Id="30"  
  291.         SortId="30" />  
  292.   
  293. </DevInfor>  

AndroidManifest.xml:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.home.testshare"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="17" />  
  10.   
  11.     <uses-permission android:name="android.permission.GET_TASKS" />  
  12.     <uses-permission android:name="android.permission.INTERNET" />  
  13.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  14.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  15.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  16.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  17.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  18.     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />  
  19.     <uses-permission android:name="android.permission.GET_ACCOUNTS" />  
  20.     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
  21.   
  22.     <supports-screens  
  23.         android:anyDensity="true"  
  24.         android:largeScreens="true"  
  25.         android:normalScreens="true"  
  26.         android:resizeable="true"  
  27.         android:smallScreens="true" />  
  28.   
  29.     <application  
  30.         android:allowBackup="true"  
  31.         android:icon="@drawable/ic_launcher"  
  32.         android:label="@string/app_name"  
  33.         android:theme="@style/AppTheme" >  
  34.         <activity  
  35.             android:name="com.home.testshare.StartActivity"  
  36.             android:label="@string/app_name" >  
  37.             <intent-filter>  
  38.                 <action android:name="android.intent.action.MAIN" />  
  39.   
  40.                 <category android:name="android.intent.category.LAUNCHER" />  
  41.             </intent-filter>  
  42.         </activity>  
  43.         <activity android:name="com.home.testshare.AuthorizeActivity" />  
  44.         <activity android:name="com.home.testshare.MainActivity" />  
  45.         <activity android:name="com.home.testshare.ShowInfoActivity" />  
  46.         <activity android:name="com.home.testshare.ShareActivity" />  
  47.   
  48.         <!-- share SDK -->  
  49.         <activity  
  50.             android:name="cn.sharesdk.framework.ShareSDKUIShell"  
  51.             android:configChanges="keyboardHidden|orientation|screenSize"  
  52.             android:theme="@android:style/Theme.Translucent.NoTitleBar"  
  53.             android:windowSoftInputMode="stateHidden|adjustResize" >  
  54.   
  55.             <!--  
  56.                 AuthorizeAdapter表示一个继承自cn.sharesdk.framework.authorize.AuthorizeAdapter  
  57.                 的类,这个类可以监听到页面的生命周期,也可以获取授权页面的各种UI控件。   
  58.                 开发者可以通过继承AuthorizeAdapter,重写其方法,并获取各种UI来自定义这个页面的行为。  
  59.             -->  
  60.             <meta-data  
  61.                 android:name="AuthorizeAdapter"  
  62.                 android:value="cn.sharesdk.demo.MyAdapter" />  
  63.   
  64.             <!--  
  65.                 Dropbox的SSO功能需要在此处添加一个对ACTION_VIEW事件的过滤器,其中的scheme是  
  66.                 “db-”前缀再开发者应用的加上appKey。如果此过滤器不设置,则不能完成SSO功能授权  
  67.             -->  
  68.             <intent-filter>  
  69.                 <data android:scheme="db-7janx53ilz11gbs" />  
  70.   
  71.                 <action android:name="android.intent.action.VIEW" />  
  72.   
  73.                 <category android:name="android.intent.category.BROWSABLE" />  
  74.                 <category android:name="android.intent.category.DEFAULT" />  
  75.             </intent-filter>  
  76.         </activity>  
  77.     </application>  
  78.   
  79. </manifest>  

布局文件layout:

start.xml:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="match_parent"  
  4.     android:orientation="vertical" >  
  5.   
  6.     <Button  
  7.         android:id="@+id/start_btn_authorize"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="授权" />  
  11.   
  12.     <Button  
  13.         android:id="@+id/start_btn_share"  
  14.         android:layout_width="match_parent"  
  15.         android:layout_height="wrap_content"  
  16.         android:text="分享" />  
  17.   
  18. </LinearLayout>  

authorize.xml:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <ListView  
  8.         android:id="@+id/authorize_lv"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content" />  
  11.   
  12. </LinearLayout>  

listview_row.xml:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="horizontal" >  
  6.   
  7.     <ImageView  
  8.         android:id="@+id/listview_row_iv"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_gravity="center_vertical"  
  12.         android:layout_margin="5dp" />  
  13.   
  14.     <TextView  
  15.         android:id="@+id/listview_row_tv"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         android:layout_gravity="center_vertical"  
  19.         android:layout_marginLeft="20dp"  
  20.         android:textSize="18sp" />  
  21.   
  22. </LinearLayout>  

main.xml:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <Button  
  8.         android:id="@+id/main_btn_getInfo"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="获取信息" />  
  12.   
  13.     <Button  
  14.         android:id="@+id/main_btn_logout"  
  15.         android:layout_width="match_parent"  
  16.         android:layout_height="wrap_content"  
  17.         android:text="注销登录" />  
  18.   
  19. </LinearLayout>  

share.xml:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <Button  
  8.         android:id="@+id/share_btn_all_hasUI"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="分享全部(有分享界面)" />  
  12.   
  13.     <Button  
  14.         android:id="@+id/share_btn_all_noUI"  
  15.         android:layout_width="match_parent"  
  16.         android:layout_height="wrap_content"  
  17.         android:text="分享全部(无分享界面)" />  
  18.   
  19.     <TextView  
  20.         android:layout_width="match_parent"  
  21.         android:layout_height="wrap_content"  
  22.         android:layout_marginTop="10dp"  
  23.         android:gravity="center_horizontal"  
  24.         android:text="分享到指定平台(只列出部分)" />  
  25.   
  26.     <Button  
  27.         android:layout_marginTop="10dp"  
  28.         android:id="@+id/share_btn_Qzone"  
  29.         android:layout_width="match_parent"  
  30.         android:layout_height="wrap_content"  
  31.         android:text="分享到QQ空间" />  
  32.   
  33.     <Button  
  34.         android:id="@+id/share_btn_txweibo"  
  35.         android:layout_width="match_parent"  
  36.         android:layout_height="wrap_content"  
  37.         android:text="分享到腾讯微博" />  
  38.   
  39.     <Button  
  40.         android:id="@+id/share_btn_sinaweibo"  
  41.         android:layout_width="match_parent"  
  42.         android:layout_height="wrap_content"  
  43.         android:text="分享到新浪微博" />  
  44.   
  45.     <Button  
  46.         android:id="@+id/share_btn_renren"  
  47.         android:layout_width="match_parent"  
  48.         android:layout_height="wrap_content"  
  49.         android:text="分享到人人网" />  
  50.   
  51. </LinearLayout>  

show_info.xml:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <ScrollView  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_alignParentTop="true" >  
  11.   
  12.         <TextView  
  13.             android:id="@+id/show_info_tv"  
  14.             android:layout_width="match_parent"  
  15.             android:layout_height="wrap_content"  
  16.             android:layout_marginRight="10dp"  
  17.             android:autoLink="all"  
  18.             android:textColor="#ff000000" />  
  19.     </ScrollView>  
  20.   
  21. </RelativeLayout>  

values里面的strings:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8" ?>   
  2. <resources>  
  3.   <string name="app_name">TestShare</string>   
  4.   <string name="action_settings">Settings</string>   
  5.   <string name="hello_world">Hello world!</string>   
  6.   <integer name="app_version_code">27</integer>   
  7.   <string name="app_version">2.3.2</string>   
  8.   <string name="proj_name">ShareSDK</string>   
  9.   <string name="more">更多</string>   
  10.   <string name="sm_item_demo">接口</string>   
  11.   <string name="sm_item_auth">授权</string>   
  12.   <string name="sm_item_wechat">微信</string>   
  13.   <string name="sm_item_yixin">易信</string>   
  14.   <string name="sm_item_customer">自定义接口</string>   
  15.   <string name="sm_item_fl_weibo">关注新浪微博</string>   
  16.   <string name="sm_item_fl_tc">关注腾讯微博</string>   
  17.   <string name="sm_item_visit_wechat">关注官方微信</string>   
  18.   <string name="sm_item_visit_website">关注官方网站</string>   
  19.   <string name="sm_item_about">Demo版本 Ver. %s</string>   
  20.   <string name="plz_choose_wechat">请选择微信客户端完成操作</string>   
  21.   <string name="get_token_format">获取%s的AccessToken</string>   
  22.   <string name="get_user_info_format">获取%s授权用户资料</string>   
  23.   <string name="get_other_info_format">获取%s其他用户资料</string>   
  24.   <string name="share_to_format">分享到%s</string>   
  25.   <string name="demo_share_all_gui">分享全部(有分享界面)</string>   
  26.   <string name="demo_share_all">分享全部(无界面,直接分享)</string>   
  27.   <string name="demo_get_access_token">获取AccessToken</string>   
  28.   <string name="demo_get_my_info">获取授权用户资料</string>   
  29.   <string name="demo_get_other_info">获取其他用户资料</string>   
  30.   <string name="get_sina_friends_list">获取新浪微博关注列表</string>   
  31.   <string name="get_tencent_friends_list">获取腾讯微博关注列表</string>   
  32.   <string name="customer_douban">搜索用户</string>   
  33.   <string name="customer_facebook">获取通知列表</string>   
  34.   <string name="customer_nemb">获取推荐话题</string>   
  35.   <string name="customer_renren">上传照片到用户的相册</string>   
  36.   <string name="customer_sina">获取微博主页列表</string>   
  37.   <string name="customer_qzone">发表日志到QQ空间</string>   
  38.   <string name="customer_tencent">获取我的粉丝列表</string>   
  39.   <string name="customer_twitter">获取主页列表</string>   
  40.   <string name="customer_kaixin">获取可能认识的人</string>   
  41.   <string name="customer_sohu">获取好友列表</string>   
  42.   <string name="customer_youdao">获取笔记本列表</string>   
  43.   <string name="customer_suishenkan">获取搜狐随身看书签列表</string>   
  44.   <string name="not_yet_authorized">尚未授权</string>   
  45.   <string name="share_content">ShareSDK for Android不仅集成简单、支持如QQ好友、微信、新浪微博、腾讯微博等所有社交平台,而且还有强大的统计分析管理后台,实时了解用户、信息流、回流率、传播效应等数据,详情见官网http://sharesdk.cn @ShareSDK</string>   
  46.   <string name="share_content_short">ShareSDK不仅集成简单、支持如微信、新浪微博、腾讯微博等社交平台,而且还有强大的统计分析管理后台,实时了解用户、信息流、回流率、传播效应等数据,详情见官网http://sharesdk.cn @ShareSDK</string>   
  47.   <string name="evenote_title">ShareSDK是一个神奇的SDK</string>   
  48.   <string name="update">文字分享</string>   
  49.   <string name="image_upload">图片分享(本地图片)</string>   
  50.   <string name="image_upload_bitmap">图片分享(Bitmap对象)</string>   
  51.   <string name="image_upload_url">图片分享(网络图片)</string>   
  52.   <string name="emoji_upload">表情分享(本地图片)</string>   
  53.   <string name="emoji_upload_url">表情分享(网络图片)</string>   
  54.   <string name="emoji_upload_bm">表情分享(Bitmap对象)</string>   
  55.   <string name="music_upload">音乐分享</string>   
  56.   <string name="video_upload">视频分享</string>   
  57.   <string name="webpage_upload">网页分享(本地图片)</string>   
  58.   <string name="webpage_upload_bitmap">网页分享(Bitmap对象)</string>   
  59.   <string name="webpage_upload_url">网页分享(网络图片)</string>   
  60.   <string name="app_upload">应用分享(携带文件)</string>   
  61.   <string name="app_upload_extinfo">应用分享(携带脚本)</string>   
  62.   <string name="file_upload">文件分享</string>   
  63.   <string name="share_to_wechat">微信好友</string>   
  64.   <string name="share_to_moment">微信朋友圈</string>   
  65.   <string name="share_to_favorite">微信收藏</string>   
  66.   <string name="wechat_demo_title">微信分享Demo标题</string>   
  67.  <string name="qzone_add_blog_sample">  
  68.   <h1>QQ互联</h1>   
  69.   <font color="red">轻松分享,</font>   
  70.   <font color="green">快乐生活。</font>   
  71.   <a href="http://connect.qq.com">详情请看。</a>   
  72.   <img src="http://imgcache.qq.com/ptlogin/head/1_100.gif" />   
  73.   </string>  
  74.   <string name="wechat_client_is_not_installed_correctly">微信客户端未安装或版本太旧</string>   
  75.   <string name="wechat_client_not_support_following_operation">微信客户端不支持第三方应用执行关注功能</string>   
  76.   <string name="share_to_yixin">易信好友</string>   
  77.   <string name="share_to_yixin_moment">易信朋友圈</string>   
  78.   <string name="share_to_yixin_favorite">易信收藏</string>   
  79.   <string name="yixin_demo_title">易信分享Demo标题</string>   
  80.   <string name="receive_rewards">恭喜你得到%s个金币!</string>   
  81.   <string name="buy_success">购买成功</string>   
  82.   <string name="buy_failed">购买失败</string>   
  83.   <string name="weibo_oauth_regiseter">应用授权</string>   
  84.   <string name="website">http://www.shareSDK.cn</string>   
  85.   <string name="weibo_upload_content">分享图片</string>   
  86.   <string name="wechat_client_inavailable">目前您的微信版本过低或未安装微信,需要安装微信才能使用</string>   
  87.   <string name="google_plus_client_inavailable">Google+ 版本过低或者没有安装,需要升级或安装Google+才能使用!</string>   
  88.   <string name="qq_client_inavailable">QQ 版本过低或者没有安装,需要升级或安装QQ才能使用!</string>   
  89.   <string name="pinterest_client_inavailable">Pinterest版本过低或者没有安装,需要升级或安装Pinterest才能使用!</string>   
  90.   <string name="instagram_client_inavailable">Instagram版本过低或者没有安装,需要升级或安装Instagram才能使用!</string>   
  91.   <string name="yixin_client_inavailable">目前您的易信版本过低或未安装易信,需要安装易信才能使用</string>   
  92.   <string name="sinaweibo">新浪微博</string>   
  93.   <string name="tencentweibo">腾讯微博</string>   
  94.   <string name="qzone">QQ空间</string>   
  95.   <string name="wechat">微信好友</string>   
  96.   <string name="wechatmoments">微信朋友圈</string>   
  97.   <string name="wechatfavorite">微信收藏</string>   
  98.   <string name="facebook">Facebook</string>   
  99.   <string name="twitter">Twitter</string>   
  100.   <string name="renren">人人网</string>   
  101.   <string name="kaixin">开心网</string>   
  102.   <string name="email">邮件</string>   
  103.   <string name="shortmessage">信息</string>   
  104.   <string name="sohumicroblog">搜狐微博</string>   
  105.   <string name="sohusuishenkan">搜狐随身看</string>   
  106.   <string name="neteasemicroblog">网易微博</string>   
  107.   <string name="douban">豆瓣</string>   
  108.   <string name="youdao">有道云笔记</string>   
  109.   <string name="evernote">印象笔记</string>   
  110.   <string name="linkedin">Linked In</string>   
  111.   <string name="googleplus">Google+</string>   
  112.   <string name="foursquare">FourSquare</string>   
  113.   <string name="qq">QQ</string>   
  114.   <string name="pinterest">Pinterest</string>   
  115.   <string name="flickr">Flickr</string>   
  116.   <string name="tumblr">Tumblr</string>   
  117.   <string name="dropbox">Dropbox</string>   
  118.   <string name="vkontakte">VK</string>   
  119.   <string name="instagram">Instagram</string>   
  120.   <string name="yixin">易信</string>   
  121.   <string name="yixinmoments">易信朋友圈</string>   
  122.   <string name="share_to_qzone">分享到QQ空间</string>   
  123.   <string name="incentive_title">分享有奖</string>   
  124.   <string name="failed_to_start_incentive_page">无法打开“分享有奖页面”</string>   
  125.   <string name="download_faield">下载失败</string>   
  126.   <string name="cancel">取消</string>   
  127.   <string name="finish">完成</string>   
  128.   <string name="sharing">分享操作正在后台进行…</string>   
  129.   <string name="share_to">分享到</string>   
  130.   <string name="share">分享</string>   
  131.   <string name="multi_share">图文分享</string>   
  132.   <string name="share_completed">分享成功</string>   
  133.   <string name="share_canceled">分享已取消</string>   
  134.   <string name="select_one_plat_at_least">请选择一个目标平台</string>   
  135.   <string name="list_friends">%s的朋友</string>   
  136.   <string name="share_failed">分享失败</string>   
  137.   <string name="pull_to_refresh">下拉刷新</string>   
  138.   <string name="release_to_refresh">松开刷新</string>   
  139.   <string name="refreshing">刷新中…</string>   
  140.   </resources>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值