2017-10-30 21 views
-1

私が現在取り組んでいるニュースアプリケーションのretrofit2を試したところ、APIクラスの実装を呼び出すことにしました。しかし、私はNullPointerExceptionが得続ける、ここに私のフラグメントのコードがあります:APIにアクセスしようとするとNULLポインタ例外が発生する

public class IgnFragment extends Fragment { 


@BindView(R.id.ignNewsContainer) 
RecyclerView ignNewsContainer; 
Unbinder unbinder; 

Call<NewsArticle> call; 
public IgnFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_ign, container, false); 
    unbinder = ButterKnife.bind(this, view); 
    return view; 

} 

@Override 
public void onStart() { 
    super.onStart(); 
    call = NewsApi.getApi().getArticles("ign", "top"); 
    getClient(); 
} 
public void getClient(){ 
    call.enqueue(new Callback<NewsArticle>() { 
     @Override 
     public void onResponse(Call<NewsArticle> call, Response<NewsArticle> response) { 
      NewsArticle newsArticle = response.body(); 
      NewsAdapter newsAdapter = new NewsAdapter(newsArticle.getArticles(),getContext()); 
      ignNewsContainer.setAdapter(newsAdapter); 
      LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); 
      linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
      ignNewsContainer.setLayoutManager(linearLayoutManager); 
     } 

     @Override 
     public void onFailure(Call<NewsArticle> call, Throwable t) { 
      t.printStackTrace(); 
      Log.e("Error","Called"); 
     } 
    }); 
} 

@Override 
public void onDestroyView() { 
    super.onDestroyView(); 
    unbinder.unbind(); 
} 

、ここでは私のAPIサービスクラスです:

public class NewsApi { 
private static final String API_KEY = "________"; 
private static final String URL_BASE ="https://newsapi.org/v1/"; 


private static NewsService newsService =null; 
public static NewsService getApi(){ 
    if(newsService == null){ 
     Retrofit retrofit= new Retrofit.Builder() 
       .baseUrl(URL_BASE) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .client(getClient()) 
       .build(); 
     NewsService api = retrofit.create(NewsService.class); 
    } 
    return newsService; 
} 

public static OkHttpClient getClient(){ 
    HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 
    logging.setLevel(HttpLoggingInterceptor.Level.BODY); 
    OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 
    return httpClient.addInterceptor(logging).build(); 
} 

public interface NewsService{ 
    @GET("articles?apiKey=" + API_KEY) 
    Call<NewsArticle> getArticles(@Query("source") String source,@Query("sortBy") String sortBy); 
} 

}

と、ここで私が手にエラーがあります:

10-30 20:42:01.640 32640-32640/cc.codemonkey.newsportal E/AndroidRuntime:致命的除外:メイン プロセス:cc.codemonkey.newsportal、PID:32640 java.lang.NullPointerException:インタフェースメソッド 'retrofit2.Call cc.codemonkey.newsportal.service.NewsApi $ NewsService.getArticles(java.lang.String、java.lang)を呼び出そうとしました。 .String) 'nullオブジェクトの参照で cc.codemonkey.newsportal.fragments.IgnFragment.onStart(IgnFragment.java:54) android.support.v4.app.Fragment.performStart(Fragment.java:2265) android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1369)android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1574)の android.support.v4.app.FragmentManagerImplの .moveToState(FragmentManager.java:1641)0 android.support.v4.app.FragmentManagerImpl.executeOpsでandroid.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794) (FragmentManager.java:2415)android.support.v4.appで で。 android.support.v4.app.FragmentManagerImpl.execSingleActionでandroid.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2153) でFragmentManagerImpl.executeOpsTogether(FragmentManager.java:2200) (FragmentManager.java:2034) android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:651) android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)の android.support.v4.view.ViewPager.populate(ViewPager.java:1239)ののはandroid.support.v4.viewの にあります。 ViewPager.onMeasure(ViewPager.java:1613) android.view.View.measure(View.java:17442) at android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:727) android.widget.RelativeLayoutにあります。 onMeasure(RelativeLayout.java:463) android.view.View.measure(View.java:17442) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout .onMeasure(FrameLayout.java:430) (android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139) at android.view.View.measure(View.java:17442) android.view android.widget.LinearLayoutでandroid.widget.LinearLayout.measureVertical(LinearLayout.java:722) でandroid.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) で.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 。onMeasure(LinearLayout.java:613) android.view.View.measure(View.java:17442) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure FrameLayout.java:430) android.view.View.measure(View.java:17442) (android.view.View.View.MarketingChildWithMargins(ViewGroup.java:5463)) (android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout。 java:1436)android.widget.LinearLayout.measureVertical(LinearLayout.java:722)の とandroid.widget.LinearLayout.onMeasure(LinearLayout.java:613) android.view.View.measure(View.java:17442) (android.view.View.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at com 。android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2560) android.view.View.measure(View.java:17442) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java :2001) android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372) at android.view.ViewRootImpl.doTraversal(ViewRoo tImpl.java:1054) とandroid.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:5779) (android.view.Choreographer $ CallbackRecord.run(Choreographer.java:767) android.view.Choreographer)にあります。 doCallbacks(Choreographer.java:580) android.view.Choreographer.doFrame(Choreographer.java:550) (android.view.Choreographer)$ FrameDisplayEventReceiver.run(Choreographer.java:753) android.os.Handler。ハンドルコード(Handler.java:739) とandroid.os.Handler.dispatchMessage(Handler.java:95) とandroid.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5253) at java.lang。

答えて

0

あなたの問題は

NewsAdapter newsAdapter = new NewsAdapter(newsArticle.getArticles(),getContext());

問題はnewsArticleはとてもresponse.body() nullである

NewsArticle newsArticle = response.body();

ここでは初期化されているnullをされてくださいだというこの正確なラインでありますデバッグしようとすると、なぜそれが空であるかを確認してください!これを修正すると、ソリューションが機能するはずです。 また、NullPointerExceptionの詳細については、What is a NullPointerException, and how do I fix it?を参照してください。

関連する問題