I';我使用改型来解析android中的数据,但不断得到一个空指针异常
代码如下: 请求接口类I';我使用改型来解析android中的数据,但不断得到一个空指针异常,android,retrofit,Android,Retrofit,代码如下: 请求接口类 import retrofit2.Call; import retrofit2.http.GET; public interface RequestInterface { String BASE_URL = "https://newsapi.org/v2/"; @GET("top-headlines?sources=google-news&apiKey=3709c816cdcb4eb38b7e45c9829a37d7\n") Call
import retrofit2.Call;
import retrofit2.http.GET;
public interface RequestInterface {
String BASE_URL = "https://newsapi.org/v2/";
@GET("top-headlines?sources=google-news&apiKey=3709c816cdcb4eb38b7e45c9829a37d7\n")
Call<NewsList> getJSON();
}
对象列表类
import java.util.ArrayList;
public class NewsList {
private ArrayList<News> news = new ArrayList<>();
public ArrayList<News> getNews() {
return news;
}
public void setNews(ArrayList<News> news) {
this.news = news;
}
}
请尝试此操作,因为您在结尾传递了错误的url(\n)请删除并按以下方式尝试
@GET("top-headlines?sources=google-news&apiKey=3709c816cdcb4eb38b7e45c9829a37d7")
变听也
call.enqueue(new Callback<NewsList>() {
@Override
public void onResponse(Call<NewsList> call, Response<NewsList> response) {
newsArrayList = new ArrayList<>();
newsArrayList.add(response.body().getNews());
myAdapter = new MyAdapter(context, newsArrayList);
recyclerView.setAdapter(myAdapter);
}
@Override
public void onFailure(Call<NewsList> call, Throwable t) {
Log.d("Error", t.getMessage());
}
});
}
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
newsArrayList=新建ArrayList();
添加(response.body().getNews());
myAdapter=新的myAdapter(上下文,newsArrayList);
recyclerView.setAdapter(myAdapter);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.d(“Error”,t.getMessage());
}
});
}
您尚未初始化新闻列表
并尝试获取数据
尝试将结果分配给新闻列表,然后重试
@Override
public void onResponse(Call<NewsList> call, Response<NewsList> response) {
Log.i(MainActivity.class.getSimpleName().toString(),"Response : "+response.body().toString());
newsList = response.body().getNews();// assign the value from response
newsArrayList = new ArrayList<>((newsList.getNews()));
myAdapter = new MyAdapter(context, newsArrayList);
recyclerView.setAdapter(myAdapter);
}
@覆盖
公共void onResponse(调用、响应){
Log.i(MainActivity.class.getSimpleName().toString(),“Response:+Response.body().toString());
newsList=response.body().getNews();//分配response中的值
newsArrayList=newArrayList((newsList.getNews());
myAdapter=新的myAdapter(上下文,newsArrayList);
recyclerView.setAdapter(myAdapter);
}
首先,您的url不正确。删除url末尾的\n
。
其次,你的模型不正确。例如,NewsList.java
没有像articles
这样的字段。用于创建模型。您的NewsList.java必须是这样的
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class NewsList {
@SerializedName("status")
@Expose
private String status;
@SerializedName("totalResults")
@Expose
private Integer totalResults;
@SerializedName("articles")
@Expose
private List<News> articles = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getTotalResults() {
return totalResults;
}
public void setTotalResults(Integer totalResults) {
this.totalResults = totalResults;
}
public List<News> getArticles() {
return articles;
}
public void setArticles(List<News> articles) {
this.articles = articles;
}
}
import java.util.List;
导入com.google.gson.annotations.Expose;
导入com.google.gson.annotations.SerializedName;
公共类新闻列表{
@序列化名称(“状态”)
@暴露
私有字符串状态;
@SerializedName(“totalResults”)
@暴露
私有整数结果;
@序列化名称(“文章”)
@暴露
私有列表项目=null;
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共整数getTotalResults(){
返回结果;
}
公共void setTotalResults(整数totalResults){
this.totalResults=totalResults;
}
公共列表getArticles(){
归还物品;
}
公共物品(列出物品){
这个.文章=文章;
}
}
如果您看起来正确,“新闻列表”为空,则表示您尚未初始化它。这就是为什么会出现nullpointerexception
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList com.example.dell.myapi.NewsList.getNews()' on a null object reference
at com.example.dell.myapi.MainActivity$1.onResponse(MainActivity.java:57)
@GET("top-headlines?sources=google-news&apiKey=3709c816cdcb4eb38b7e45c9829a37d7")
call.enqueue(new Callback<NewsList>() {
@Override
public void onResponse(Call<NewsList> call, Response<NewsList> response) {
newsArrayList = new ArrayList<>();
newsArrayList.add(response.body().getNews());
myAdapter = new MyAdapter(context, newsArrayList);
recyclerView.setAdapter(myAdapter);
}
@Override
public void onFailure(Call<NewsList> call, Throwable t) {
Log.d("Error", t.getMessage());
}
});
}
@Override
public void onResponse(Call<NewsList> call, Response<NewsList> response) {
Log.i(MainActivity.class.getSimpleName().toString(),"Response : "+response.body().toString());
newsList = response.body().getNews();// assign the value from response
newsArrayList = new ArrayList<>((newsList.getNews()));
myAdapter = new MyAdapter(context, newsArrayList);
recyclerView.setAdapter(myAdapter);
}
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class NewsList {
@SerializedName("status")
@Expose
private String status;
@SerializedName("totalResults")
@Expose
private Integer totalResults;
@SerializedName("articles")
@Expose
private List<News> articles = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getTotalResults() {
return totalResults;
}
public void setTotalResults(Integer totalResults) {
this.totalResults = totalResults;
}
public List<News> getArticles() {
return articles;
}
public void setArticles(List<News> articles) {
this.articles = articles;
}
}