package com.emop.client.io; import com.emop.client.Constants; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONTokener; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; import com.weibo.net.AccessToken; import com.weibo.net.Oauth2AccessTokenHeader; import com.weibo.net.Utility; import com.weibo.net.Weibo; import com.weibo.net.WeiboException; import com.weibo.net.WeiboParameters; import static com.emop.client.Constants.TAG_EMOP; public class WeiBoClient { private Context context = null; private static WeiBoClient ins = null; //private ClientConfig cfg = null; public WeiBoClient(Context ctx){ ins = this; ins.context = ctx; } public static WeiBoClient getInstance(){ return ins; } public List<WeiboUser> getUserFriends(){ return this.getUserFriends(false); } public List<WeiboUser> getUserFriends(boolean refresh){ SharedPreferences settings = context.getSharedPreferences(Constants.PREFS_NAME, 0); String data = settings.getString(Constants.PREFS_SINA_FRIENDS, ""); JSONArray result = null; if(refresh || data == null || data.trim().length() == 0){ result = getFromRemote(); data = result.toString(); Log.d(TAG_EMOP, "save friends:" + data); SharedPreferences.Editor editor = settings.edit(); editor.putString(Constants.PREFS_SINA_FRIENDS, data); editor.commit(); }else { Log.d(TAG_EMOP, "Get friends:" + data); try { result = (JSONArray) new JSONTokener(data).nextValue(); } catch (JSONException e) { e.printStackTrace(); } } List<WeiboUser> ul = new ArrayList<WeiboUser>(result.length()); for(int i = 0; i < result.length(); i++){ try { ul.add(new WeiboUser(result.getJSONObject(i))); } catch (JSONException e) { e.printStackTrace(); } } return ul; } private JSONArray getFromRemote(){ Weibo weibo = Weibo.getInstance(); WeiboParameters bundle = new WeiboParameters(); String url = Weibo.SERVER + "friendships/friends.json"; String json = null; JSONObject user = null; JSONArray r = new JSONArray(); try { bundle.add("source", Weibo.getAppKey()); bundle.add("count", "150"); bundle.add("uid", "1"); json = weibo.request(context, url, bundle, Utility.HTTPMETHOD_GET, weibo.getAccessToken()); Log.d(TAG_EMOP, json); user = (JSONObject) new JSONTokener(json).nextValue(); JSONObject u = null; if(user.has("users")){ JSONArray users = user.getJSONArray("users"); for(int i = 0; i < users.length(); i++){ u = new JSONObject(); u.put("id", users.getJSONObject(i).get("id")); u.put("screen_name", users.getJSONObject(i).get("screen_name")); u.put("name", users.getJSONObject(i).get("name")); u.put("profile_image_url", users.getJSONObject(i).get("profile_image_url")); r.put(i, u); } } } catch (WeiboException e) { Log.d(TAG_EMOP, "msg:" + e.getMessage() + ", code:" + e.getStatusCode()); e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return r; } public WeiboUser getProfile(String uid){ Weibo weibo = Weibo.getInstance(); WeiboParameters bundle = new WeiboParameters(); String url = Weibo.SERVER + "users/show.json"; String json = null; JSONObject user = null; WeiboUser r = null; try { //bundle.add("source", Weibo.getAppKey()); if(weibo.getAccessToken() != null){ bundle.add("access_token", weibo.getAccessToken().getToken()); } bundle.add("uid", uid); json = weibo.request(context, url, bundle, Utility.HTTPMETHOD_GET, weibo.getAccessToken()); Log.d(TAG_EMOP, json); user = (JSONObject) new JSONTokener(json).nextValue(); if(user != null && user.has("screen_name")){ r = new WeiboUser(user); } } catch (WeiboException e) { Log.d(TAG_EMOP, "msg:" + e.getMessage() + ", code:" + e.getStatusCode()); e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return r; } }