android json数据上传到ListView

ListView肯定要绑定adapter,本文后面会介绍simpleAdapter和Baseadapter两种不同方式的绑定

要将数据上传到页面,基本步骤如下:

先贴上需要加的配置:


compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
implementation 'com.google.android.material:material:1.0.0'    		
	implementation 'com.github.bumptech.glide:glide:4.11.0'
	implementation 'com.google.code.gson:gson:2.8.6'
	implementation 'com.squareup.okhttp3:okhttp:4.4.1'
	implementation 'org.greenrobot:eventbus:3.3.1'

目录

1.生成json数据对应的pojo类(可用GsonFormat):

2.通过okhttp获取url上的数据:

3.编写jsonparse类,将json转为list(Gson):

4.页面将最终转为list的json数据通过handler传出

        1.response:Url——String(json)

        2.jsonObject:String——json

        3.jsonobject.getString('符合bean的json):json——String(若有必要)

        如果初始的json直接符合bean,省略2,3步骤

        4.调用jsonparse:String(json)——list

        5.list通过hanlder上传

5.绑定Adapter:

若绑定simpleAdapter,只需注意list为全局变量:

 若绑定BaseAdapter,重点在adapter的编写:


1.生成json数据对应的pojo类(可用GsonFormat):

2.通过okhttp获取url上的数据:

public class OkhttpUtil {
    public static final String URL = "http://124.93.196.45:10001";
    public static final String NEWS="/prod-api/press/press/list";
    /*public static final MediaType JSON=MediaType.parse("application/json;charset=utf-8");//媒体类型,此为json格式的写法*/

    public static void getRequest(String url, Callback callback){
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url(url).get().build();
        okHttpClient.newCall(request).enqueue(callback);
    }

}

3.编写jsonparse类,将json转为list(Gson):

public class JsonParse {//2

    public List<RowsBean> getVideoList(String json) {
        //使用gson库解析JSON数据
        Gson gson = new Gson();
        //创建一个TypeToken的匿名子类对象,并调用对象的getType()方法
        Type listType = new TypeToken<List<RowsBean>>() {
        }.getType();
        //把获取到的信息集合存到videoList中
        List<RowsBean> videoList = gson.fromJson(json, listType);
        return videoList;
    }
}

4.页面将最终转为list的json数据通过handler传出

        1.response:Url——String(json)

        2.jsonObject:String——json

        3.jsonobject.getString('符合bean的json):json——String(若有必要)

        如果初始的json直接符合bean,省略2,3步骤

        4.调用jsonparse:String(json)——list

        5.list通过hanlder上传

 private void initData() {
        OkhttpUtil.getRequest(OkhttpUtil.URL+OkhttpUtil.NEWS, new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                Log.d("wyf","请求失败");
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                String json=response.body().string();
                JsonParse jsonParse=new JsonParse();
                JSONObject jsonObject=null;
                try {
                    jsonObject=new JSONObject(json);
                    String rowsjson=jsonObject.getString("rows");
                    List<RowsBean> rowslist=jsonParse.getVideoList(rowsjson);
                    Log.d("wyf",rowslist.toString());

                    Message msg=new Message();
                    msg.what=0;
                    msg.obj=rowslist;
                    handler.sendMessage(msg);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    Handler handler=new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(@NonNull Message msg) {
            switch (msg.what){
                case 0:
                    bindSimpleAdapter((List<RowsBean>) msg.obj);
            }
            return false;
        }
    });

5.绑定Adapter:

若绑定simpleAdapter,只需注意list为全局变量:

 若绑定BaseAdapter,重点在adapter的编写:

public class newsAdapter extends BaseAdapter {
    public Context context;
    private List<RowsBean> list;

    public newsAdapter(Context context, List<RowsBean> list) {
        this.context = context;
        this.list = list;
    }

    public List<RowsBean> getList() {
        return list;
    }

    public void setList(List<RowsBean> list) {
        this.list = list;
    }

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

    @Override
    public RowsBean getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if(convertView==null){
            viewHolder=new ViewHolder();
            convertView= LayoutInflater.from(context).inflate(R.layout.show_news,null);
            viewHolder.iv_image=convertView.findViewById(R.id.iv_image);
            viewHolder.tv_num=convertView.findViewById(R.id.tv_num);
            viewHolder.tv_time=convertView.findViewById(R.id.tv_time);
            viewHolder.tv_title=convertView.findViewById(R.id.tv_title);
            convertView.setTag(viewHolder);
        }else{
            viewHolder= (ViewHolder) convertView.getTag();
        }
        RowsBean rowsBean=list.get(position);
        Glide.with(context).load(OkhttpUtil.URL+rowsBean.getCover()).error(R.mipmap.ic_launcher).into(viewHolder.iv_image);
        viewHolder.tv_title.setText(rowsBean.getTitle());
        viewHolder.tv_time.setText(rowsBean.getCreateTime());
        viewHolder.tv_num.setText(String.valueOf(rowsBean.getReadNum()));
        return convertView;
    }

    /** 创建 ViewHolder */
    class ViewHolder{
        ImageView iv_image;
        TextView tv_title;
        TextView tv_time;
        TextView tv_num;
    }
}

注意:simpleadapter实现网络图片的话比较复杂,不推荐

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值