当前位置:  编程技术>移动开发

android异步请求服务器数据示例

    来源: 互联网  发布时间:2014-10-23

    本文导语:  1、在android4.0以后的版本,主线程(UI线程)不在支持网络请求,原因大概是影响主线程,速度太慢,容易卡机,所以需要开启新的线程请求数据; 代码如下:thread1 = new Thread(){@Overridepublic void run() {  try {    URL url = new URL(WebUrl...

1、在android4.0以后的版本,主线程(UI线程)不在支持网络请求,原因大概是影响主线程,速度太慢,容易卡机,所以需要开启新的线程请求数据;

代码如下:

thread1 = new Thread(){
@Override
public void run() {
  try {
    URL url = new URL(/tech-mobile-dev/WebUrlManager.CARSEVER_GetCarsServlet);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
    //缓冲读取
    byte[] data = new byte[1024];
    int len = 0;
    String bufferString = "";
    while((len = bis.read(data)) != -1){
bufferString+=new String(data, 0, len);
    }
    carList = new JSONArray(bufferString.trim());
    //System.out.println(carList);
    /*
    for(int i=0;i

2、新线程完成后一启动,发现报错,空指针 nullpointerexception,要等待线程完毕后才能得到数据,下面是两种解决方法:

1)要么判断线程是否还活着;

2)要么在线程中设置一flag,结束后,更改其状态

代码如下:

/*
    //等待线程thread1执行完毕
    while(true){
    if(thread1.isAlive()){
try {
  Thread.sleep(500);
} catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
    }else{
break;
    }
}
    */
    //当线程还没结束,就睡500毫秒ms
    while(!flag){
  try {
    Thread.sleep(500);
  } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}}}

3、处理返回的json数据
1)向服务器请求Json数据,保存在carList

代码如下:

URL url = new URL(/tech-mobile-dev/WebUrlManager.CARSEVER_GetCarsServlet);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
//缓冲读取
byte[] data = new byte[1024];
int len = 0;
String bufferString = "";
while((len = bis.read(data)) != -1){
bufferString+=new String(data, 0, len);
}
carList = new JSONArray(bufferString.trim());

2)解析Json数据

代码如下:

JSONObject car = (JSONObject) getItem(position);
try {
//this.pic.setImageBitmap(carImageArray.get(position));
this.title.setText(car.getString("title"));
this.describe.setText(car.getString("describe"));
this.updateTime.setText(car.getString("updateTime"));
this.price.setText(String.format("%.1f", car.getDouble("price"))+"万");
this.pic.setTag(WebUrlManager.CARSERVER_CAR_IMAGE+car.getString("image"));
new AsyncViewTask().execute(this.pic);
} catch (JSONException e1) {
e1.printStackTrace();
}

4、图片加载通常很慢,最好异步请求
异步请求类源代码

代码如下:

import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.webkit.URLUtil;
import android.widget.ImageView;

public class AsyncViewTask extends AsyncTask {
private View mView;
private HashMap> imageCache;

public AsyncViewTask() {
  imageCache = new HashMap>();
}

protected Drawable doInBackground(View... views) {
  Drawable drawable = null;
  View view = views[0];
  if (view.getTag() != null) {
if (imageCache.containsKey(view.getTag())) {
SoftReference cache = imageCache.get(view.getTag().toString());
drawable = cache.get();
if (drawable != null) {
  return drawable;
}
}
try {
if (URLUtil.isHttpUrl(view.getTag().toString())) {// 如果为网络地址。则连接url下载图片
  URL url = new URL(view.getTag().toString());
  HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  conn.setDoInput(true);
  conn.connect();
  InputStream stream = conn.getInputStream();
  drawable = Drawable.createFromStream(stream, "src");
  stream.close();
} else {// 如果为本地数据,直接解析
  drawable = Drawable.createFromPath(view.getTag().toString());
}
} catch (Exception e) {
Log.v("img", e.getMessage());
return null;
}
  }
  this.mView = view;
  return drawable;
}

protected void onPostExecute(Drawable drawable) {
  if (drawable != null) {
ImageView view = (ImageView) this.mView;
view.setImageDrawable(drawable);
this.mView = null;
}}}


    
 
 

您可能感兴趣的文章:

  • 异步 HTTP 客户端开发包 android-async-http
  • Android加载对话框同时异步执行实现方法
  • android在异步任务中关闭Cursor的代码方法
  • android开发教程之handler异步更新ui
  • Android中BroadcastReceiver(异步接收广播Intent)的使用
  • Android 异步加载图片的实例代码
  • Android 异步获取网络图片并处理导致内存溢出问题解决方法
  • android开发教程之handle实现多线程和异步处理
  • android异步加载图片并缓存到本地实现方法
  • Android多线程及异步处理问题详细探讨
  • Android 异步加载图片分析总结
  • android异步任务设计思详解(AsyncTask)
  • Android开发:TextView加入滚动条示例
  • android开发教程之switch控件使用示例
  • android开启免提切换功能示例
  • Android开发之注册登录方法示例
  • 手写android布局示例
  • Android示例程序 apps-for-android
  • android网络编程之android连接网络的简单示例代码
  • android获取当前手机号示例程序
  • android读取assets文件示例
  • android读取raw文件示例
  • android实现来电静音示例(监听来电)
  • android开机自启动app示例分享
  • android开发教程之自定义控件checkbox的样式示例
  • Android创建文件实现对文件监听示例
  • android输入框与文本框加滚动条scrollview示例
  • android保存Bitmap图片到指定文件夹示例
  • android播放gif格式图片示例
  • Android获取apk程序签名信息代码示例
  • android中设置TextView/Button 走马灯(Marquee)效果示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • android接收到蓝牙配对请求时如何点亮屏幕具体实现
  • Android下通过httpClient发送GET和POST请求的实例代码
  • Android HttpClient GET或者POST请求基本使用方法
  • android平台HttpGet、HttpPost请求实例
  • Android HTTP发送请求和接收响应的实例代码
  • Android发送GET与POST请求的DEMO详解
  • Android封装的http请求实用工具类
  • Android中发送Http请求(包括文件上传、servlet接收)的实例代码
  • 申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)
  • Android瀑布流实例 android_waterfall
  • Android开发需要的几点注意事项总结
  • Android系统自带样式 (android:theme)
  • android 4.0 托管进程介绍及优先级和回收机制
  • Android网络共享软件 Android Wifi Tether
  • Android访问与手机通讯相关类的介绍
  • Android 图标库 Android GraphView
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 轻量级Android开发工具 Android Tools
  • Android 2.3 下StrictMode介绍
  • Android 开发环境 Android Studio
  • IDEA的Android开发插件 idea-android
  • Android手机事件提醒 Android Notifier
  • XBMC的Android客户端 android-xbmcremote
  • Android小游戏 Android Shapes
  • Android电池监控 Android Battery Dog
  • android开发:“android:WindowTitle”没有对应项no resource
  • Android 上类似IOS 的开关控件。 Android ToggleButton
  • android保存Bitmap图片到指定文件夹示例 iis7站长之家
  • Android 2D游戏引擎 Android Angle


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3