[我正在尝试实施翻新,但出现错误[重复项]

问题描述 投票:-1回答:1
  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();
            }
        });
    }
java retrofit retrofit2
1个回答
0
投票

Apiclient中存在分配错误。

您可以按照以下说明更正吗?

public static Retrofit getclient(){
    if(retrofit==null){
        retrofit = new Retrofit.Builder().
      baseUrl(url).addConverterFactory(GsonConverterFactory.create()).build();
    }
    return retrofit;
 }
© www.soinside.com 2019 - 2024. All rights reserved.