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;
}

}