文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-06 10:27

关注

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);
   
    //当线程还没结束,就睡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开发教程之handle实现多线程和异步处理Android中BroadcastReceiver(异步接收广播Intent)的使用Android多线程及异步处理问题详细探讨Android加载对话框同时异步执行实现方法android开发教程之handler异步更新uiAndroid App中实现图片异步加载的实例分享详解Android的OkHttp包编写异步HTTP请求调用的方法Android最基本的异步网络请求框架全面总结Android中线程的异步处理方式Android编程实现异步消息处理机制的几种方法总结


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯