HttpClient利用AsyncTask解析Json并展示在listview上

一. MainActivity
1.在onCreate方法里进行网络判断

 @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

setContentView(R.layout.activity_demo);

mLVContents = findViewById(R.id.lv_contents);
mAdapter = new DemoAdapter(this);
mLVContents.setAdapter(mAdapter);

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
  @Override public void onClick(View v) {
    //网络判断
    if (!NetUtil.hasNetwork(DemoActivity.this)) {
       new AlertDialog.Builder(this)
   	   .setTitle("没有可用网络")
       .setMessage("当前网络不可用,是否去设置")
       .setPositiveButton("确认", new DialogInterface.OnClickListener() {
      @Override public void onClick(DialogInterface dialog, int which) {
        dialog.dismiss();
        Toast.makeText(DemoActivity.this, "去设置", Toast.LENGTH_LONG).show();
      }
    })
    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
      @Override public void onClick(DialogInterface dialog, int which) {
        dialog.dismiss();
      }
    })
    .show();
    return;
    }

    //查询数据
    initData();
  }
});
	//点击条目进行吐司所点击条目的内容
   mLVContents.setOnItemClickListener(new AdapterView.OnItemClickListener() {
	  @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
	    List<String> data = mAdapter.getItem(position);
	        Toast.makeText(DemoActivity.this, data.get(0) + ":" + data.get(1), Toast.LENGTH_LONG)
	        .show();
		  }
   	 });
  }

2.定义网络路径
String urlStr = “https://suggest.taobao.com/sug?code=utf-8&q=手机”;

3.自定义一个方法开始使用AsyncTask

private void initData() {

    result = new AsyncTask<String, Integer, List<List<String>>>() {
      @Override protected List<List<String>> doInBackground(String... strings) {

        //网络请求数据           发布进度

        //将String信息解析成Bean     发布发布进度

        try {
          //client
          HttpClient client = HttpClients.createDefault();
          //请求对象
          //构造模式
          HttpUriRequest request = RequestBuilder
              .get()
              .setUri(strings[0])
              .build();
          //链式调用

          //执行请求
          HttpResponse response = client.execute(request);
          //结果
          if (response.getStatusLine().getStatusCode() == 200) {
            String result = EntityUtils.toString(response.getEntity());
            //后台操作过程中,发布进度。
            //会导致onProgressUpdate调用
            publishProgress(REQUEST_DATA_SUCCESS);

            //gson使用反射解析Bean
            Bean bean = new Gson().fromJson(result, Bean.class);
            publishProgress(SERA_DATA_SUCCESS);

            return bean.getResult();
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
        return null;
      }

      //后台工作进度
      @Override protected void onProgressUpdate(Integer... values) {
        //if(values[0] == REQUEST_DATA_SUCCESS) {
        //  "请求数据成功";
        //} else {
        //  "解析数据成功";
        //}
        Toast.makeText(DemoActivity.this,
            values[0] == REQUEST_DATA_SUCCESS ?"请求数据成功":"解析数据成功",
            Toast.LENGTH_SHORT).show();
      }

      @Override protected void onPostExecute(List<List<String>> s) {
        mAdapter.setmDatas(s);
      }
    }.execute(urlStr);
  }
4.流转换

private String stream2String(InputStream inputStream) throws IOException {
    StringBuilder sb = new StringBuilder();
    
    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
    for (String tmp = br.readLine(); tmp != null; tmp = br.readLine()) {
      sb.append(tmp);
    }

    return sb.toString();
  }

二.适配器页面

public class DemoAdapter extends BaseAdapter {、

  private List<List<String>> mDatas;
  private Context mContext;

  public DemoAdapter(Context context) {
    this.mContext = context;
    //初始化 为什么在这里写
    mDatas = new ArrayList<>();
  }

  //外部调用 更新数据
  public void setmDatas(List<List<String>> mDatas) {
    this.mDatas = mDatas;
    notifyDataSetChanged();
  }

  @Override public int getCount() {
    return mDatas.size();
  }

  @Override public List<String> getItem(int position) {
    List<String> item = mDatas.get(position);
    //return item.get(0);
    //return mDatas.get(position).get(0);
    return item;
  }

  @Override public long getItemId(int position) {
    return position;
  }

  //parent = ListView
  @Override public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder vh;
    //复用,不重复创建View
    if(convertView == null) {
      //convertView = View.inflate(mContext, R.layout.item, null);
      convertView = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false);
      vh = new ViewHolder();
      vh.mIcon = convertView.findViewById(R.id.iv_icon);
      vh.mText = convertView.findViewById(R.id.tv_text);
      convertView.setTag(vh);
    } else {
      vh = (ViewHolder) convertView.getTag();
    }

    //TODO 设置图片

    //设置 数据
    //vh.mText.setText(getItem(position));
    vh.mText.setText(getItem(position).get(0));

    return convertView;
 }

  class ViewHolder {
    private ImageView mIcon;
    private TextView mText;
  }
}

根据需求和页面效果可自由进行调整

三.Bean类

public class Bean {

 public List<List<String>> result;

	  public List<List<String>> getResult() {
   		 return result;
 	 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值