public class JsonResult {
/**
* success : true
* code : 10000
* message : 获取成功
* data : [{"id":"1343753738156515328","title":"Android加载大图片,解决OOM问题","viewCount":206,"commentCount":59,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/7.png"},{"id":"1343753738156515329","title":"Volley/Xutils对大图片处理算法源码分析","viewCount":50,"commentCount":71,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/1.png"},{"id":"1343753738156515330","title":"Android开发网络安全配置","viewCount":68,"commentCount":105,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/7.png"},{"id":"1343753738156515331","title":"Android开发网络编程,请求图片","viewCount":197,"commentCount":69,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/14.png"},{"id":"1343753738156515332","title":"Intent页面跳转工具类分享","viewCount":308,"commentCount":49,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/7.png"},{"id":"1343753738156515333","title":"阳光沙滩商城的API文档","viewCount":232,"commentCount":75,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/15.png"},{"id":"1343753738156515334","title":"Android课程视频打包下载","viewCount":77,"commentCount":103,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/0.png"},{"id":"1343753738156515335","title":"非常轻量级的gif录制软件","viewCount":144,"commentCount":81,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/3.png"},{"id":"1343753738156515336","title":"Fiddler抓包工具,墙裂推荐,功能很强大很全的一个工具","viewCount":259,"commentCount":58,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/9.png"},{"id":"1343753738156515337","title":"AndroidStudio奇淫技巧-代码管理","viewCount":325,"commentCount":66,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/16.png"},{"id":"1343753738156515338","title":"OC和Swift混编","viewCount":310,"commentCount":88,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/13.png"},{"id":"1343753738156515339","title":"最新的Android studio是不是没有Android Device Monitor","viewCount":214,"commentCount":17,"publishTime":"2020-12-29T03:00:31.570+0000","userName":"程序员拉大锯","cover":"/imgs/10.png"}]
*/
private boolean success;
private int code;
private String message;
private List<DataBean> data;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* id : 1343753738156515328
* title : Android加载大图片,解决OOM问题
* viewCount : 206
* commentCount : 59
* publishTime : 2020-12-29T03:00:31.570+0000
* userName : 程序员拉大锯
* cover : /imgs/7.png
*/
private String id;
private String title;
private int viewCount;
private int commentCount;
private String publishTime;
private String userName;
private String cover;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getViewCount() {
return viewCount;
}
public void setViewCount(int viewCount) {
this.viewCount = viewCount;
}
public int getCommentCount() {
return commentCount;
}
public void setCommentCount(int commentCount) {
this.commentCount = commentCount;
}
public String getPublishTime() {
return publishTime;
}
public void setPublishTime(String publishTime) {
this.publishTime = publishTime;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getCover() {
return cover;
}
public void setCover(String cover) {
this.cover = cover;
}
}
}
以下是RecycleView适配器的代码:
public class JsonResultAdapter extends RecyclerView.Adapter<JsonResultAdapter.InnerHolder> {
private static final String TAG = "JsonResultAdapter";
private List<JsonResult.DataBean> data = new ArrayList<>();
@NonNull
@Override
public InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_json_result, parent, false);
return new InnerHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull InnerHolder holder, int position) {
//绑定数据
ImageView coverView = holder.itemView.findViewById(R.id.result_cover);
TextView titleTv = holder.itemView.findViewById(R.id.result_title);
TextView authorTv= holder.itemView.findViewById(R.id.result_author);
JsonResult.DataBean dataBean = data.get(position);
titleTv.setText(dataBean.getTitle());
authorTv.setText(dataBean.getUserName());
// Picasso.get().load();
Log.d(TAG,"cover url --->" +dataBean.getCover());
}
@Override
public int getItemCount() {
return data.size();
}
public void setData(JsonResult jsonResult) {
data.clear();
data.addAll(jsonResult.getData());
notifyDataSetChanged();
}
public class InnerHolder extends RecyclerView.ViewHolder {
public InnerHolder(@NonNull View itemView) {
super(itemView);
}
}
}
MainActivity中的代码:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private RecyclerView mResultList;
private JsonResultAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mResultList = findViewById(R.id.result_list);
mResultList.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new JsonResultAdapter();
mResultList.setAdapter(mAdapter);
mResultList.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
outRect.top=5;
outRect.bottom=5;
}
});
}
public void getRequest(View view){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://10.0.2.2:9102")
.build();
API api = retrofit.create(API.class);
Call<ResponseBody> task = api.getJson();
task.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.d(TAG,"onResponse--->"+response.code());
if (response.code()== HttpURLConnection.HTTP_OK){
try {
Log.d(TAG,"json--->"+response.body().string());
String result =response.body().string();
Gson gson =new Gson();
//把字符串转换成对象
JsonResult jsonResult = gson.fromJson(result, JsonResult.class);
updateList(jsonResult);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.d(TAG,"onFailure..."+ t.toString());
}
});
}
private void updateList(JsonResult jsonResult) {
mAdapter.setData(jsonResult);
}
}
以下是Log
2020-12-29 12:08:09.060 6683-6683/com.example.retorfitdemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.retorfitdemo, PID: 6683
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.example.retorfitdemo.domain.JsonResult.getData()' on a null object reference
at com.example.retorfitdemo.adapter.JsonResultAdapter.setData(JsonResultAdapter.java:55)
at com.example.retorfitdemo.MainActivity.updateList(MainActivity.java:89)
at com.example.retorfitdemo.MainActivity.access$000(MainActivity.java:26)
at com.example.retorfitdemo.MainActivity$2.onResponse(MainActivity.java:70)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:81)
at retrofit2.-$$Lambda$DefaultCallAdapterFactory$ExecutorCallbackCall$1$3wC8FyV4pyjrzrYL5U0mlYiviZw.run(Unknown Source:6)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2020-12-29 12:08:09.135 6683-6683/? I/Process: Sending signal. PID: 6683 SIG: 9
控制指针异常
NullPointerException: Attempt to invoke virtual method 'java.util.List com.example.retorfitdemo.domain.JsonResult.getData()' on a null object reference
也就是说
你这个设置进来的数据为空
public void setData(JsonResult jsonResult) {
data.clear();
data.addAll(jsonResult.getData());
notifyDataSetChanged();
}
jsonResult 为null
一楼正解。
错误的意思是JsonResult.getData()' on a null object reference
在这一句得知,调用getData()方法,发生是空指针。
也就是说,调用者是空的。
JsonResult,他不存在。
你可以反查下,他的来源。