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):
3.编写jsonparse类,将json转为list(Gson):
4.页面将最终转为list的json数据通过handler传出
3.jsonobject.getString('符合bean的json):json——String(若有必要)
4.调用jsonparse:String(json)——list
若绑定simpleAdapter,只需注意list为全局变量:
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实现网络图片的话比较复杂,不推荐