当前位置: 首页 > 知识库问答 >
问题:

APICall响应无法分析数据

金瑞
2023-03-14

我需要从这个URL解析数据https://newsapi.org/v1/articles?apiKey=6946d0c07a1c4555a4186bfcade76398

我尝试过将BASE_URL和Query更改为几个不同的选项,但没有任何帮助。也许是我的物体有问题,但我找不到错误。

*****更新*****:我像评论中所说的那样更改了我的对象,但仍然使用失败函数。

主要活动。JAVA

public class MainActivity extends AppCompatActivity implements 
OnItemClickListener{

public static final String EXTRA_TITLE="Title";
public static final String EXTRA_DESCRIPTION="Description";
public static final String EXTRA_URL="URL";


private RecyclerView recycler;
private RecyclerAdapter adapter;
private ArrayList<NewsCell> newsList;
private Call<List<NewsCell>> apiCall;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    newsList=new ArrayList<>();
    setupRecycler();
    setUpApiCall();


}

private void setUpApiCall(){
 apiCall=NetworkUtils.getApiInterface().getNews(
             "6946d0c07a1c4555a4186bfcade76398","top","bbc-news");
 apiCall.enqueue(new Callback<List<NewsCell>>() {
        @Override
        public void onResponse(Call<List<NewsCell>> call, 
Response<List<NewsCell>> response) {
            if(response.isSuccessful() && response.body().size()!=0){
                newsList.addAll(response.body());
                adapter=new 
RecyclerAdapter(MainActivity.this,newsList,MainActivity.this);
                recycler.setAdapter(adapter);
            }
            else{
                Toast.makeText(MainActivity.this, "No results", 
Toast.LENGTH_SHORT).show();

            }
        }

        @Override
        public void onFailure(Call<List<NewsCell>> call, Throwable t) {
            Toast.makeText(MainActivity.this, "Error", 
Toast.LENGTH_SHORT).show();

        }
    });

}

private void setupRecycler() {
    recycler=findViewById(R.id.recyclerView);
    recycler.setLayoutManager(new LinearLayoutManager(this));
}

@Override
public void onItemClick(int position) {
    Intent detailIntent=new Intent(this,NewsSingle.class);
    NewsCell clickedItem=newsList.get(position);

    detailIntent.putExtra(EXTRA_TITLE,clickedItem.getTitle());
    detailIntent.putExtra(EXTRA_DESCRIPTION,clickedItem.getDescription());
    detailIntent.putExtra(EXTRA_URL,clickedItem.getUrlToImage());

    startActivity(detailIntent);
}

}

内特沃库提尔斯。JAVA

public class NetworkUtils {
private static final String BASE_API="https://newsapi.org/v1/";
private static APIInterface apiInterface;

public static APIInterface getApiInterface(){
    if(apiInterface==null){
        Retrofit retrofit =new Retrofit.Builder()
                .baseUrl(BASE_API)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        apiInterface=retrofit.create(APIInterface.class);
    }
    return apiInterface;
}
}

Api接口。JAVA

public interface APIInterface {
@GET("articles")
Call<List<NewsCell>> getNews(@Query("apiKey") String key, @Query("sortBy") 
String sort,@Query("source") String source);
}

文章JAVA

public class Article {

@SerializedName("author")
@Expose
private String author;
@SerializedName("title")
@Expose
private String title;
@SerializedName("description")
@Expose
private String description;
@SerializedName("url")
@Expose
private String url;
@SerializedName("urlToImage")
@Expose
private String urlToImage;
@SerializedName("publishedAt")
@Expose
private String publishedAt;

public String getAuthor() {
    return author;
}

public void setAuthor(String author) {
    this.author = author;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

public String getUrlToImage() {
    return urlToImage;
}

public void setUrlToImage(String urlToImage) {
    this.urlToImage = urlToImage;
}

public String getPublishedAt() {
    return publishedAt;
}

public void setPublishedAt(String publishedAt) {
    this.publishedAt = publishedAt;
}

}

NewsCell.java

public class NewsCell {

@SerializedName("status")
@Expose
private String status;
@SerializedName("source")
@Expose
private String source;
@SerializedName("sortBy")
@Expose
private String sortBy;
@SerializedName("articles")
@Expose
private List<Article> articles = null;

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getSource() {
    return source;
}

public void setSource(String source) {
    this.source = source;
}

public String getSortBy() {
    return sortBy;
}

public void setSortBy(String sortBy) {
    this.sortBy = sortBy;
}

public List<Article> getArticles() {
    return articles;
}

public void setArticles(List<Article> articles) {
    this.articles = articles;
}

}

共有1个答案

贺佑运
2023-03-14

但是在您的模型类NewsCell中,您只解析标题、描述和urlToImage。在文章数组中

@SerializedName("title")
@Expose
private String title;
@SerializedName("description")
@Expose
private String description;
@SerializedName("urlToImage")
@Expose
private String urlToImage;

所以我建议你把你的回答全部抄下来。转到此站点并正确生成模型类。并粘贴到您的新闻单元格中

 类似资料:
  • 我正在尝试解析运营商网络的USSD响应。找到一个链接https://github.com/alaasalman/ussdinterceptor,但它不支持4.2.2及以上版本。是否有任何api或方法可以达到此目的?

  • 问题内容: 我正在尝试从FlickR解析JSON响应,但是遇到了困难。我已经进行了一些测试,并且收到200的响应代码,并且能够使用日志记录拦截器查看实际的JSON。 但是,当我尝试访问JSON对象时,我收到了一个空指针。我觉得这与我的映射/ JSON到POJO有关: 相片: 照片: JSON响应: LOGCAT 72行 问题答案: 您的课程不适合服务器 响应, 因此您的身体为 Null 。您的模型

  • 我希望有人能帮我解决这个问题。 我想用WebClient创建一个Rest客户端,从API中检索响应。所以我创建了我的Spring项目,添加了webflux、lombok和h2。我还创建了一个DTO类“CashAccount”和以下方法: 当我使用“.bodyToMono(String.class)”时,所有的功能都很好,我收到了结果: 相反,当我使用“.bodyToMono(cashcount.c

  • 本文向大家介绍深入分析Tomcat无响应问题及解决方法,包括了深入分析Tomcat无响应问题及解决方法的使用技巧和注意事项,需要的朋友参考一下   问题描述   生产环境下有几台tomcat,但突然某个时候发现所有的请求都不能响应了,由于我们的web server使用的是nginx,会将请求反向到tomcat上,所以起初怀疑是nginx就没有收到请求,但查看日志后发现,nginx中大量出现499的

  • 我试图使用selenium webdriver和Appium在macbook上为android应用程序设置自动化。 我已经启动了appium服务器并使用maven运行了测试,但每次运行测试时都会出现错误。错误在这里:-

  • 当试图使用Apache Commons Net 3.3 FTPSClient针对Mina的Apache FTP Server执行命令时,列表解析失败。 我已经做了一些调试,在读取服务器列表后,上的属性包含如下格式的条目: