我正在使用此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)
将调用更改为:这是您的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的图像,该方法返回一个图像,然后我在图像视图中显示它。