java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.newsapp/com.example.newsapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object retrofit2.Retrofit.create(java.lang.Class)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2974)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3059)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object retrofit2.Retrofit.create(java.lang.Class)' on a null object reference
at com.example.newsapp.MainActivity.onCreate(MainActivity.java:31)
at android.app.Activity.performCreate(Activity.java:7258)
at android.app.Activity.performCreate(Activity.java:7249)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1222)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3059)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
API客户端代码:-
public class Apiclient {
public static final String url ="https://newsapi.org/v2/";
public static Retrofit retrofit=null;
public static Retrofit getclient(){
if(retrofit==null){
Retrofit retrofit = new Retrofit.Builder().baseUrl(url).addConverterFactory(GsonConverterFactory.create()).build();
}return retrofit;
}
}
API接口代码:-
public interface Newsapi
{
@GET("top-headlines")
Call<List<NewsList>> getNewsList(@Query("country") String country, @Query("apikey") String apikey);
@GET("everything")
Call<List<NewsList>> getNewssearch(@Query("q") String keyword, @Query("apikey") String apikey);
}
MainActivity代码:-
newsapi = Apiclient.getclient().create(Newsapi.class);
"In my app i have implemented searchview so whatever i write in searchview it is store in keyword."
public void getData(final String keyword){
final Call<NewsList> newslist;
if (keyword.length()>0){
newslist =newsapi.getNewssearch(keyword,"my apikey");
}
else{
newslist = newsapi.getNewsList("in","df6a7fa137da4dbca0cf72655d941229");
}
newslist.enqueue(new Callback<NewsList>() {
@Override
public void onResponse(Call<NewsList> call, Response<NewsList> response) {
NewsList list = response.body();
recyclerView.setAdapter(new NewsAdapter(MainActivity.this,list.getArticles()));
Toast.makeText(MainActivity.this,"Sucess" ,Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<NewsList> call, Throwable t) {
Toast.makeText(MainActivity.this,"Fail",Toast.LENGTH_SHORT).show();
}
});
}
Apiclient中存在分配错误。
您可以按照以下说明更正吗?
public static Retrofit getclient(){
if(retrofit==null){
retrofit = new Retrofit.Builder().
baseUrl(url).addConverterFactory(GsonConverterFactory.create()).build();
}
return retrofit;
}