手机
当前位置:查字典教程网 >编程开发 >安卓软件开发 >android异步请求服务器数据示例
android异步请求服务器数据示例
摘要:1、在android4.0以后的版本,主线程(UI线程)不在支持网络请求,原因大概是影响主线程,速度太慢,容易卡机,所以需要开启新的线程请求...

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

复制代码 代码如下:

thread1 = new Thread(){

@Override

public void run() {

try {

URL url = new URL(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(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;

}}}

【android异步请求服务器数据示例】相关文章:

Android 开机广播的使用及配置

在android开发中进行数据存储与访问的多种方式介绍

android广播接收者实例

Android 混淆代码详解及实例

Android中SQLite数据库操作

Android判断SDK版本及判断是否联网

Android连接服务器Servlet

Android开机自启动服务的实现方法

android动态壁纸调用的简单实例

android客户端从服务器端获取json数据并解析的实现代码

精品推荐
分类导航