- 浏览: 206351 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xumin_minzi:
我也在使用ndk编译,ffmpeg源码放在哪个目录里面?
[原创]Android ndkr8编译 FFmpeg 0.11.1 "Happiness" -
ericchan2012:
在Dialog调用show方法之后
【原创】Android 设置Dialog的长宽和位置 -
maohualei:
求解: 我设置的时候 位置居然没有反应 dial ...
【原创】Android 设置Dialog的长宽和位置
1,http请求,将paramList发送到http://api.renren.com/restserver.do进行post请求。
同时得到HttpResponse响应,判断响应代码是否为200,为200表示成功。解析JSON数据为相关对象。
2,解析Json:
写一个RenRen bean用来保存信息;
3,使用AsyncTask来异步网络连接和查询:
FriendsTask的代码如下:
4,使用一个adapter来适配listview,由于返回头像的时候只返回的是url,所以,通过新开一个线程来异步加载头像图片。
Adapter类如下:
异步加载图片的类AsyncImageLoader如下:
好了,这样你就可以从人人网获取好友信息了。
更多接口请查看:
http://wiki.dev.renren.com/wiki/API#.E5.9F.BA.E7.A1.80API
同时得到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> { @Override protected String doInBackground(String... params) { Log.i("FriendsTask", "----doInBackground----"); getParams(); return sendRequest(); } @Override protected void onCancelled() { Log.i("FriendsTask", "----onCancelled----"); super.onCancelled(); } @Override protected 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); } } @Override protected void onPreExecute() { Log.i("FriendsTask", "----onPreExecute----"); // 任务启动,可以在这里显示一个对话框,这里简单处理 pDialog = ProgressDialog.show(RenrenFriendsActivity.this, "Importing", "importing..."); } @Override protected 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去更新UI new Thread() { @Override public 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
发表评论
-
android java调用命令行给文件赋权限
2012-09-27 18:18 1659public void chmodFiles(){ Pr ... -
InputStream,String,File相互转化
2012-09-27 18:10 10191. String --> InputStream I ... -
android Uri获取真实路径转换成File的方法
2012-09-27 18:07 1924有的时候要将android uri如content://med ... -
android将路径转化为URI
2012-09-27 18:06 6465如果已經取得了檔案的路徑的字串,那怎麼轉成URI呢? St ... -
如何向android的setting语言列表中添加一门语言(
2012-09-27 12:59 1162如题: 看了下,android2. ... -
android更改暗码
2012-09-26 13:31 1059在Contact应用程序下的SpecialCharSequen ... -
android触屏震动以及震动强度修改
2012-09-26 09:24 4057PhoneWindowManager.java: 在inter ... -
android修改默认语言
2012-09-26 09:24 1504在build/tools/Buildinfo.sh下面 e ... -
android设置默认壁纸
2012-09-25 12:48 16021,动态壁纸 在frameworks\base\core\re ... -
android设置wallpaper
2012-09-25 12:00 1308设置壁纸的代码在 Launcher.java中的case Ad ... -
android Settings中的各个默认设置
2012-09-25 11:07 997在android中,Settings中有许多的默认设置,比如默 ... -
android 调用camera相关操作
2012-09-21 22:11 10551,通过intent调用camera Intent int ... -
android gallery相关操作
2012-09-21 20:11 9991,android调用gallery获取图片 Intent ... -
android中shape
2012-09-15 12:35 7961,作用: 可以在xml中定义图形,并且定义一些效果 2,用法 ... -
android中layer-list
2012-09-15 12:27 10541,作用: 可以将多个图片(图层)按照顺序层叠起来。 2,用法 ... -
android客户端连接人人网之二----获取签名
2012-09-13 14:19 1103官方文档: http://dev.xiaonei.com/wi ... -
android客户端连接人人网之一----获取授权
2012-09-13 14:06 1137连接人人网,有两种方法,参考人人网的官网: http://wi ... -
android美化ToggleButton
2012-09-12 09:55 22111、设置XML属性 我们需要设置Toggle ... -
android复合控件
2012-09-11 20:14 1123自定义组合控件,用来复用 其一: 首先看布局文件: <? ... -
android中SharedPreference的使用
2012-09-08 11:08 907SharedPreference,相信了解过android的同 ...
相关推荐
这个源码项目是对人人网Android客户端的高度仿制,旨在提供一个学习和参考的平台,帮助开发者深入理解移动应用的开发流程,尤其是社交应用的设计和实现。它包含了完整的代码、资源文件以及图片素材,为开发者提供了...
3. **连接参数**:在建立连接时,可以通过`setHeader`方法设置额外的头部信息,例如设置Sec-WebSocket-Key和Sec-WebSocket-Version等WebSocket特定的头部字段。 4. **监听器**:为了处理WebSocket的各种事件,需要...
在Android应用开发中,客户端和服务端的连接是实现数据交互的关键环节。这个小型的网络服务器与安卓客户端的连接示例可能涵盖了HTTP、HTTPS协议、WebSocket、Socket编程等基础概念。以下将详细介绍这些知识点: 1. ...
Android应用源码之空气质量检测客户端项目-IT计算机-毕业设计.zip Android应用源码之空气质量检测客户端项目-IT计算机-毕业设计.zip Android应用源码之空气质量检测客户端项目-IT计算机-毕业设计.zip Android应用...
新闻管理系统是一种综合性的应用,通常包括服务器端、客户端(如Android和PC)以及数据库等多个组成部分。在这个名为"news-manager-system-master.zip"的压缩包中,我们可能会发现一个完整的新闻管理解决方案,涵盖...
在本节"057集-Android客户端与服务端交互-服务端代码"的视频教程中,我们将深入探讨Android应用程序如何与服务端进行有效且安全的通信,这对于开发任何涉及网络功能的Android应用来说都是至关重要的。这个教程针对的...
在本示例中,Android客户端负责用户界面、数据获取和显示。它使用HTTP或HTTPS协议通过网络与服务器进行通信。Android SDK提供了HttpURLConnection和HttpClient等API来实现网络请求,但现在推荐使用Retrofit、OkHttp...
【标题】:“白宫Android客户端 wh-app-android”是一个专门为Android用户设计的应用程序,它允许用户方便地访问和互动与白宫的相关信息。这个应用是白宫官方在移动设备上的一个接口,为公众提供了一个窗口,以了解...
在Android平台上开发一款视频资讯客户端,涉及到的主要技术点包括网络通信、数据解析、UI布局以及数据展示。本项目实现了一个简单的交互过程,即Android客户端通过HTTP请求与Web服务器进行通信,服务器响应XML格式的...
"duic 配置中心 Java-Android 客户端工具包-duic-java-client.zip" 是一个专门为Java和Android开发者设计的客户端工具包,用于连接和交互与duic配置中心。这个工具包简化了在应用程序中集成远程配置的过程,使得...
- 在Android客户端中,设置日志输出,以便调试连接、消息接收等问题。 - 使用模拟器或真实设备进行端到端测试,确保在各种网络条件下的正常运行。 5. **安全与优化**: - **TLS/SSL加密**: 为了保护通信安全,...
### Android Socket 客户端连接知识点详解 #### 一、概览 在现代移动应用开发中,客户端(如Android应用程序)与服务器之间的实时通信是非常重要的功能之一。Android平台提供了多种方式来实现网络通信,其中Socket...
android-support-v4-v7-v13-v14-v17(官方最新完整版),官方最新版的,压缩包内包含android-support-v4、android-support-v7-appcompat,android-support-v7-cardview,android-support-v7-gridlayout,android-support-...
在Android应用开发中,客户端与服务器之间的数据交互是不可或缺的一部分,尤其在当今互联网时代,用户需求不断增长,数据交换的需求也日益复杂。本教程将深入探讨Android客户端如何与服务器进行有效的数据交互,以及...
ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar 要是需要最新的,下载地址: http://code.google.com/p/ksoap2-android/
总之,创建Android的XMPP客户端涉及到的知识点包括XMPP协议原理、Android开发环境、Smack库的使用、网络连接管理、异步编程、消息收发、群组聊天、文件传输以及推送通知的集成。通过熟练掌握这些技术,开发者可以...
ProjectRTC是一个WebRTC的PC端项目,实现了WebRTC的服务器功能和...AndroidRTC是ProjectRTC的android客户端,下载后直接AndroidStudio打开。AndroidRTC中包含两个moudle,app是主界面,webrtc-client是工具类moudle 。
Android下的加密信息客户端 WhisperSystems-TextSecureAndroid下的加密信息客户端 WhisperSystems-TextSecureAndroid下的加密信息客户端 WhisperSystems-TextSecure
在Android应用开发中,"客户端+服务端"的架构模式是常见的设计方式,它涉及到Android客户端与远程服务器之间的数据通信和交互。这种模式允许应用程序在本地执行用户界面操作,同时利用服务器的计算能力和存储资源来...