Java 在onCreate中使用数组返回null

Java 在onCreate中使用数组返回null,java,android,arrays,json,null,Java,Android,Arrays,Json,Null,我正在获取一些JSON数据并将其解析到我的对象中。我正试图用它来获取我需要的所有字段。然而,我在我的arraylist上得到一个空值,例如,我不确定为什么 private List<MovieDetail> mMovieDetails; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.

我正在获取一些JSON数据并将其解析到我的对象中。我正试图用它来获取我需要的所有字段。然而,我在我的arraylist上得到一个空值,例如,我不确定为什么

private List<MovieDetail> mMovieDetails;

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


    Intent intent = getIntent();
    MovieDetail movieDetail = (MovieDetail) intent.getSerializableExtra(POSTER_TRANSFER);
    Glide.with(this).load(movieDetail.getPoster()).into((ImageView) findViewById(R.id.main_backdrop));

    ProcessMovieSearchImdbIDString processMovieSearchImdbIDString = new ProcessMovieSearchImdbIDString(movieDetail.getImdbID());
    processMovieSearchImdbIDString.execute();


    CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.main_collapsing);
    collapsingToolbarLayout.setTitle(movieDetail.getTitle());

       //this returns null which it shouldn't
    if(mMovieDetails !=null){
        for (MovieDetail detail: mMovieDetails) {
            Log.d("Details", "movie actors: " + detail.getActors());
        }
    }


    ((TextView) findViewById(R.id.grid_title)).setText(movieDetail.getTitle());
    ((TextView) findViewById(R.id.grid_writers)).setText(movieDetail.getWriter());
    ((TextView) findViewById(R.id.grid_actors)).setText(movieDetail.getActors());
    ((TextView) findViewById(R.id.grid_director)).setText(movieDetail.getDirector());
    ((TextView) findViewById(R.id.grid_genre)).setText(movieDetail.getGenre());
    ((TextView) findViewById(R.id.grid_released)).setText(movieDetail.getReleased());
    ((TextView) findViewById(R.id.grid_plot)).setText(movieDetail.getPlot());
    ((TextView) findViewById(R.id.grid_runtime)).setText(movieDetail.getRuntime());


}

private void setupActionBar() {
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        // Show the Up button in the action bar.
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        startActivity(new Intent(this, MainActivity.class));
        return true;
    }
    return super.onOptionsItemSelected(item);
}



public class ProcessMovieSearchImdbIDString extends JsonParse {
    public ProcessMovieSearchImdbIDString(String id) {
        super(id);
    }

    public void execute() {
        //super.execute();
        ProcessData processData = new ProcessData();
        processData.execute();
    }
    public class ProcessData extends DownloadSearchMovieImdbidJsonData {

        protected void onPostExecute(String webData) {
            super.onPostExecute(webData);
             //this doesn't return null
            mMovieDetails=getMovies();
            for (MovieDetail detail : mMovieDetails) {
                Log.d("Details", "movie actors a: " + detail.getActors());
            }

        }
    }
}
私有列表详细信息;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_详细信息);
setupActionBar();
Intent=getIntent();
MovieDetail MovieDetail=(MovieDetail)intent.getSerializableExtra(POSTER_TRANSFER);
将(movieDetail.getPoster())装入((ImageView)findViewById(R.id.main_background));
ProcessMovieSearchImdbIDString ProcessMovieSearchImdbIDString=new ProcessMovieSearchImdbIDString(movieDetail.getImdbID());
ProcessMovieSearchIDBidString.execute();
折叠工具栏布局折叠工具栏布局=(折叠工具栏布局)findViewById(R.id.main\u折叠);
塌陷ToolbarLayout.setTitle(movieDetail.getTitle());
//这将返回不应该返回的null
if(mMovieDetails!=null){
对于(电影详细信息:mMovieDetails){
Log.d(“细节”,“电影演员:+detail.getActors());
}
}
((TextView)findviewbyd(R.id.grid_title)).setText(movieDetail.getTitle());
((TextView)findViewById(R.id.grid_writers)).setText(movieDetail.getWriter());
((TextView)findviewbyd(R.id.grid_actors)).setText(movieDetail.getActors());
((TextView)findViewById(R.id.grid_director)).setText(movieDetail.getDirector());
((TextView)findviewbyd(R.id.grid_genre)).setText(movieDetail.getGenre());
((TextView)findViewById(R.id.grid_released)).setText(movieDetail.getReleased());
((TextView)findViewById(R.id.grid_plot)).setText(movieDetail.getPlot());
((TextView)findviewbyd(R.id.grid_runtime)).setText(movieDetail.getRuntime());
}
私有void setupActionBar(){
ActionBar ActionBar=getSupportActionBar();
if(actionBar!=null){
//在操作栏中显示“向上”按钮。
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
int id=item.getItemId();
if(id==android.R.id.home){
startActivity(新意图(this,MainActivity.class));
返回true;
}
返回super.onOptionsItemSelected(项目);
}
公共类ProcessMovieSearchIDBidString扩展了JsonParse{
公共进程MOVIESEARCHIMDBIDSTRING(字符串id){
超级(id);
}
public void execute(){
//super.execute();
ProcessData ProcessData=新的ProcessData();
processData.execute();
}
公共类ProcessData扩展了DownloadSearchMovieImdbidJsonData{
受保护的void onPostExecute(字符串webData){
super.onPostExecute(webData);
//这不会返回null
mMovieDetails=getMovies();
对于(电影详细信息:mMovieDetails){
Log.d(“细节”,“电影演员a:+detail.getActors());
}
}
}
}

我不知道为什么在onCreate方法中使用数组时返回null。如果有人能帮忙,我将不胜感激

问题的解决方案是将列表移动到@M.WaqasPervez提到的onPostExecute

这是代码修复

    public class ProcessMovieSearchImdbIDString extends JsonParse {
    public ProcessMovieSearchImdbIDString(String id) {
        super(id);
    }

    public void execute() {
        //super.execute();
        ProcessData processData = new ProcessData();
        processData.execute();
    }
    public class ProcessData extends DownloadSearchMovieImdbidJsonData {

        protected void onPostExecute(String webData) {
            super.onPostExecute(webData);

            mMovieDetails=getMovies();
            for (MovieDetail detail : mMovieDetails) {
                ((TextView) findViewById(R.id.grid_title)).setText(detail.getTitle());
                ((TextView) findViewById(R.id.grid_writers)).setText(detail.getWriter());
                ((TextView) findViewById(R.id.grid_actors)).setText(detail.getActors());
                ((TextView) findViewById(R.id.grid_director)).setText(detail.getDirector());
                ((TextView) findViewById(R.id.grid_genre)).setText(detail.getGenre());
                ((TextView) findViewById(R.id.grid_released)).setText(detail.getReleased());
                ((TextView) findViewById(R.id.grid_plot)).setText(detail.getPlot());
                ((TextView) findViewById(R.id.grid_runtime)).setText(detail.getRuntime());
            }

        }
    }
}

谢谢大家

如果发生崩溃,请更新logcat,帮助快速解决问题您还没有初始化
mMovieDetails
任何地方。我想你忘了初始化mMovieDetails了。@MohammedAtif如果我添加了一个空检查,这样它就不会崩溃,那么我现在已经初始化了
私有列表mMovieDetails=new ArrayList()但是我仍然没有得到任何返回值@indramurari@vrundpurohit您应该将实现列表的逻辑从
onCreate
移动到
onPostExecute