首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android客户端联接人人网之二-获取朋友信息

2012-09-28 
android客户端连接人人网之二----获取朋友信息1,http请求,将paramList发送到http://api.renren.com/restse

android客户端连接人人网之二----获取朋友信息
1,http请求,将paramList发送到http://api.renren.com/restserver.do进行post请求。
同时得到HttpResponse响应,判断响应代码是否为200,为200表示成功。解析JSON数据为相关对象。

private String sendRequest() {String returnValue = "0";httpClient = new DefaultHttpClient();try {HttpPost httpPost = new HttpPost("http://api.renren.com/restserver.do");httpPost.setEntity(new UrlEncodedFormEntity(paramList, HTTP.UTF_8));// 添加请求参数到请求对象HttpResponse httpResponse = httpClient.execute(httpPost);if (httpResponse.getStatusLine().getStatusCode() == 200) { // 为200表示执行成功strResult = EntityUtils.toString(httpResponse.getEntity()); // 得到返回数据(为JSON数据)Log.i("RenrenFriendsActivity", "strResult:" + strResult);if (!strResult.contains("error_code")) {renrenList = RenrenUtil.parseRenrenFromJson(strResult); // 解析JSON数据为相应对象returnValue = "1"; // 定义返回标志}}} catch (ClientProtocolException e) {strResult = e.getMessage().toString();e.printStackTrace();} catch (IOException e) {strResult = e.getMessage().toString();e.printStackTrace();} catch (Exception e) {strResult = e.getMessage().toString();e.printStackTrace();}return returnValue;}

2,解析Json:
/** * 解析JSON数据为人人对象 *  * @param renrenJsonData * @return */public static List<Renren> parseRenrenFromJson(String renrenJsonData) {List<Renren> renrenList = new ArrayList<Renren>();try {JSONArray jsonArray = new JSONArray(renrenJsonData);int length = jsonArray.length();for (int i = 0; i < length; ++i) {JSONObject jsonObject = jsonArray.getJSONObject(i);Renren renren = new Renren();renren.setId(jsonObject.getString("id"));renren.setName(jsonObject.getString("name"));renren.setHeadurl(jsonObject.getString("headurl"));renrenList.add(renren);}return renrenList;} catch (JSONException e) {}return null;}


写一个RenRen bean用来保存信息;
public class Renren {protected String id;protected String name;protected String headurl;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getHeadurl() {return headurl;}public void setHeadurl(String headurl) {this.headurl = headurl;}}

3,使用AsyncTask来异步网络连接和查询:
FriendsTask task = new FriendsTask();task.execute("10");

FriendsTask的代码如下:
class FriendsTask extends AsyncTask<String, Integer, String> {@Overrideprotected String doInBackground(String... params) {Log.i("FriendsTask", "----doInBackground----");getParams();return sendRequest();}@Overrideprotected void onCancelled() {Log.i("FriendsTask", "----onCancelled----");super.onCancelled();}@Overrideprotected void onPostExecute(String result) {Log.i("FriendsTask", "----onPostExecute----");Log.i("FriendsTask", "result:" + result);// message.setText(result);pDialog.dismiss();if (result.equals("1")) {mHandler.sendEmptyMessage(SUCCESS);} else {mHandler.sendEmptyMessage(FAILURE);}}@Overrideprotected void onPreExecute() {Log.i("FriendsTask", "----onPreExecute----");// 任务启动,可以在这里显示一个对话框,这里简单处理pDialog = ProgressDialog.show(RenrenFriendsActivity.this,"Importing", "importing...");}@Overrideprotected void onProgressUpdate(Integer... values) {// 更新进度// message.setText(values[0]);Log.i("FriendsTask", "---onProgressUpdate----");}}


4,使用一个adapter来适配listview,由于返回头像的时候只返回的是url,所以,通过新开一个线程来异步加载头像图片。
Adapter类如下:
class FriendsAdapater extends BaseAdapter {private AsyncImageLoader asyncImageLoader = new AsyncImageLoader(); // 异步获取图片TextView userName;ImageView userImage;public int getCount() {return renrenList == null ? 0 : renrenList.size();}public Object getItem(int position) {return renrenList == null ? null : renrenList.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.renren_friend_item, null);userName = (TextView) convertView.findViewById(R.id.username);userImage = (ImageView) convertView.findViewById(R.id.userimage);Renren renren = renrenList.get(position);if (renren != null) {convertView.setTag(renren.getId());userImage.setTag(renren.getHeadurl());userName.setText(renren.getName());// 异步加载图片并显示Drawable cachedImage = asyncImageLoader.loadDrawable(renren,new ImageCallback() {public void imageLoaded(Drawable imageDrawable,String imageUrl) {ImageView imageView = (ImageView) friendsListView.findViewWithTag(imageUrl);if (imageView != null) {imageView.setImageDrawable(imageDrawable);}}});if (cachedImage != null) {userImage.setImageDrawable(cachedImage);} else {// 如果没有图片,就以一个载入的图片代替显示userImage.setImageResource(R.drawable.avatar_default);}}return convertView;}}


异步加载图片的类AsyncImageLoader如下:
public class AsyncImageLoader {private HashMap<String, SoftReference<Drawable>> imageCache; // 缓存图片public AsyncImageLoader() {imageCache = new HashMap<String, SoftReference<Drawable>>();}public Drawable loadDrawable(final Renren renren,final ImageCallback imageCallback) {final String imageId = renren.getId();final String imageURL = renren.getHeadurl();// 判断缓存中是否已经存在图片,如果存在则直接返回if (imageCache.containsKey(imageId)) {SoftReference<Drawable> softReference = imageCache.get(imageId);Drawable drawable = softReference.get();if (drawable != null) {return drawable;}}final Handler handler = new Handler() {public void handleMessage(Message message) {imageCallback.imageLoaded((Drawable) message.obj, imageURL);}};// 开辟一个新线程去下载图片,并用Handler去更新UInew Thread() {@Overridepublic void run() {Drawable drawable = loadImageFromUrl(imageURL);imageCache.put(imageURL, new SoftReference<Drawable>(drawable));Message message = handler.obtainMessage(0, drawable);handler.sendMessage(message);}}.start();return null;}// 从URL下载图片public static Drawable loadImageFromUrl(String url) {URL m;InputStream i = null;try {m = new URL(url);i = (InputStream) m.getContent();} catch (MalformedURLException e1) {e1.printStackTrace();} catch (IOException e) {e.printStackTrace();}Drawable d = Drawable.createFromStream(i, "src");return d;}// 回调接口public interface ImageCallback {// 回调函数public void imageLoaded(Drawable imageDrawable, String imageUrl);}}


好了,这样你就可以从人人网获取好友信息了。
更多接口请查看:
http://wiki.dev.renren.com/wiki/API#.E5.9F.BA.E7.A1.80API

热点排行