2016-09-15 81 views
0

你好我的自定义类中有getter问题,我不知道为什么每次都返回null。当服务器响应没有任何错误时,我正在设置值。在调试时,我发现服务器的响应正常,并且创建了对象的新实例,但是当我尝试在我的活动中获取它时,会出现空值。这里有几行代码在哪里是一个问题(在我看来)。从我的自定义类使用getter时出现NullPointerException

方法:

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(); 
     } 
    }); 
} 

,这里是我的活动:

@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(); 
} 

感谢您的帮助。

+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

您正在使用您的应用程序异步调用,所以尝试更换为更新UI从onCreate()onResponse()所有必要的方法。它应该有所帮助。如果你想使用Retrofit同步调用,那么最好的做法就是加载器。

+0

如果您可以提供更多信息,可能是示例代码,这将有所帮助? – Tibrogargan

相关问题