2016-09-15 39 views
0

こんにちは私は自分のカスタムクラスでgetterに問題がありますが、毎回nullを返す理由はわかりません。私はエラーがなければ、サーバーからの応答の後に値を設定しています。私がデバッグしている間は、サーバーからの応答はOKで、オブジェクトの新しいインスタンスが作成されているのがわかりますが、私のアクティビティで取得しようとするとnullがあります。ここにいくつかのコード行が問題です(私の意見では)。私のカスタムクラスからgetterの使用中にNullPointerExceptionが発生する

方法:任意の助け

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_movie_list); 

    movieListView = (ListView) findViewById(R.id.movieListView); 
    String movie = getIntent().getStringExtra(TAG); 

    presenter = new Presenter(this,movie); 
    presenter.responseFromServer(); 
    item=presenter.getItemAdapter(); 
    movieListView.setAdapter(presenter.getItemAdapter()); 
    presenter.getItemAdapter().notifyDataSetChanged(); 
    presenter.getProgressDialog().dismiss(); 
} 

ありがとう:ここ

public void responseFromServer(){ 
    showProgressDialog(); 
    Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build(); 
    TitleInterface titleInterface = retrofit.create(TitleInterface.class); 
    Call<MovieResponse> call = titleInterface.getMovie(API_KEY,movie); 
    call.enqueue(new Callback<MovieResponse>() { 
     @Override 
     public void onResponse(Call<MovieResponse> call, Response<MovieResponse> response) { 
      List<Movie> movieList = response.body().getMovieList(); 
      ItemAdapter itemAdapter = new ItemAdapter(context.getApplicationContext(),generateData(movieList)); 
      setItemAdapter(itemAdapter); 
     } 

     @Override 
     public void onFailure(Call<MovieResponse> call, Throwable t) { 
      Toast.makeText(context, "ERROR", Toast.LENGTH_SHORT).show(); 
      progressDialog.dismiss(); 
     } 
    }); 
} 

とは、私の活動です。

+0

あなたの呼び出しは非同期です。取得しようとするまで値は設定されません。 – njzk2

+0

これを解決する方法は? – FinalDestination

+0

カスタムクラスとは何ですか?サービス? – Jaythaking

答えて

0

あなたのリクエストは、ビューの作成時に完了していないようです。あなたはこの通話の同期を使用するようにしたい場合は:あなたは、あなたのアプリで非同期呼び出しを使用している

Call<MovieResponse> call = titleInterface.getMovie(API_KEY,movie); 
Response<MovieResponse> responseBody = call.execute(); 

List<Movie> movieList = response.body().getMovieList(); 
+0

誰も私を助けることができますか? – FinalDestination

0

、そうonCreate()からonResponse()にUIを更新するために必要なすべてのメソッドを置き換えるためにしてみてください。それは助けになるはずです。 Retrofit同期呼び出しを使用する場合、そのためのベストプラクティスはローダーです。

+0

もう少し多くの情報を提供できるとしたら、おそらくサンプルコードでしょうか? – Tibrogargan

関連する問題