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

如何加载图像和作者名称在我的PGM?

党星鹏
2023-03-14

我正在使用此API:https://newsapi.org/v1/articles?source=hacker-新闻

Pojo类

public class News {
    @SerializedName("author")
    String title;
    @SerializedName("urlToImage")
    String urlToImage;

    public News(String title, String urlToImage) {
        this.title = title;
        this.urlToImage = urlToImage;
    }

    public String getTitle() {
        return title;
    }

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

    public String getUrlToImage() {
        return urlToImage;
    }

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

列表

public class NewResponse {
    @SerializedName("articles")
    private List<News> newsList;

    public List<News> getNewsList() {
        return newsList;
    }
}

api接口

我想问题就在这里但我不知道

public interface ApiInterface {
    @GET("articles?source=hacker-news&sortBy=top&")
    retrofit2.Call<NewResponse> getNews(@Query("apiKey") String apiKey);
}

网址

还有这里

public class Constants {
    public final static String NEWS_API_KEY = "687df54016f446be94f639d4cff8834f";

    public final static String NEWS_API_URL = "https://newsapi.org/";
}

适配器

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
    private Context mContext;
    private List<News> newsList;

    public RecyclerAdapter(Context mContext, List<News> newsList) {
        this.mContext = mContext;
        this.newsList = newsList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        Context context=viewGroup.getContext();
        LayoutInflater inflater=LayoutInflater.from(context);

        View news=inflater.inflate(R.layout.newlayout,viewGroup,false);

        return new MyViewHolder(news);
    }

    @Override
    public void onBindViewHolder(MyViewHolder myViewHolder, int i) {
        News news=newsList.get(i);

        TextView nTitle=myViewHolder.newsTitle;
        nTitle.setText(news.getTitle());
        // Glide.with(mContext).load(news.getPoster_path()).into(myViewHolder.newsThumbnail);
        Picasso.with((mContext)).load(news.getUrlToImage()).fit().into(myViewHolder.newsThumbnail);
    }

    @Override
    public int getItemCount() {
        return newsList.size();
    }

    @Override
    public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
        recyclerView.clearAnimation();
        super.onDetachedFromRecyclerView(recyclerView);
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        private TextView newsTitle;
        private ImageView newsThumbnail;

        public MyViewHolder(View itemView) {
            super(itemView);
            newsThumbnail = (ImageView) itemView.findViewById(R.id.imageView);
            newsTitle = (TextView) itemView.findViewById(R.id.textView2);
        }
    }
}

改造

public class NewsAPI {
    private static Retrofit retrofit = null;

    public static Retrofit getClient() {
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                .baseUrl(Constants.NEWS_API_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        }

        return retrofit;
    }
}

logcat

07-15 15:20:21.719  11101-11101/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
        at com.example.jmzala.recyclewithjson.MainActivity$1.onResponse(MainActivity.java:75)
        at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
        at android.os.Handler.handleCallback(Handler.java:800)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:194)
        at android.app.ActivityThread.main(ActivityThread.java:5409)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
        at dalvik.system.NativeStart.main(Native Method)

共有1个答案

壤驷英叡
2023-03-14

将调用更改为:这是您的API接口

@GET("articles")
retrofit2.Call<NewsResponse> getNews(@Query("source") String source,
                                     @Query("sortBy") String sortBy,
                                     @Query("apiKey") String apiKey);

从您的活动中:

ApiInterface apiInterface = APIClient.getClient().create(ApiInterface.class);

        String source = "hacker-news";
        String sortBy = "top";
        String api_key = "687df54016f446be94f639d4cff8834f";

        Call<NewsResponse> call = apiInterface.getNews(source,sortBy,api_key);
        call.enqueue(new Callback<NewsResponse>() {
            @Override
            public void onResponse(Call<NewsResponse> call, Response<NewsResponse> response) {
                if(response.body() != null){
                    Log.d(TAG,"Size of list is: "+response.body().getArticles().size());
                }
            }

            @Override
            public void onFailure(Call<NewsResponse> call, Throwable t) {

            }
        });
 类似资料:
  • 问题内容: 我有一个panel.java文件,看起来像下面的代码: 我想显示test.gif文件。我该如何完成?因为当我在Eclipse中运行它时,我只会得到其中没有图像的jframe。 问题答案: 用这个

  • 我想做一个reactjs页面懒惰加载图像。因此,我调用lazyLoadImages()内部的组件didMount()。我发现位于浏览器选项卡的浏览器加载指示器仍然一路旋转,直到加载所有图像。这让我认为我所做的并没有提供真正的懒惰加载图像体验。 有趣的是,如果我在setTimeout中用一个不太短的timeout参数包装lazyLoadImages(),例如100ms(不是0或甚至50ms),那么页

  • 问题内容: 主要代号 2.MovieAdapter.java //我可以成功显示除图片以外的所有数据 //图片链接带有“ posterpath”键 //告诉我如何在MovieAdapter的Viewholder中加载图像 // currentmovie只是一个getter和setter类 3.当前电影 问题答案: 我正在使用该库并通过以下方式加载图像 首先通过创建显示选项对象 然后通过以下方式初始

  • 问题内容: 我需要以简单的Java独立应用程序从Web加载图像。有任何想法吗? 问题答案: 这足以启动您吗?不知道您要从那里做什么。

  • 我使用图像插件(图像:^2.0.4),这样我就可以在图像上写些东西,然后将新图像保存到设备或通过邮件发送。我尝试使用“新文件”加载图像,但在颤振时出错。我询问并搜索,得到一个提示,我可以使用rootBundle在flatter中加载图像。我做到了,我得到了下面的错误。 [错误:topaz/lib/tonic/logging/dart_ERROR.cc(16)]未处理的异常:无法加载资产:packa

  • 我想通过传递一个网址来加载多个图像。与本教程不同http://www.learn2crack.com/2014/06/android-load-image-from-internet.html其中只有一个图像被下载并使用img.setImageBitmap(图像)查看;我的问题是如何将url发送到一个方法以加载该url的图像,该方法返回一个图像,然后我在图像视图中显示它。