我无法在主要活动中分配AysncTask的OnPostExecute方法返回的ArrayList

时间:2017-09-23 05:29:37

标签: android android-asynctask

我正在尝试在主要活动中从list1 ArrayList方法返回onPostExecute。我将返回的ArrayList分配给主要活动的searchingText ArrayList。我无法在AsyncTask btnSearch中获取searchText ArrayList的元素。请告诉我代码中的错误。

onClickListener

2 个答案:

答案 0 :(得分:0)

您不能通过putExtra()将ArrayList放入额外内容中,而必须使用putStringArrayListExtra()。请尝试以下代码。

 Intent intent = new Intent(MainActivity.this,WordsFound.class);
 intent.putStringArrayListExtra("searchResults",searchedText);
 startActivity(intent);

答案 1 :(得分:0)

问题出在以下代码中:

findViewById(R.id.btnSearch).setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {

    for(String word: wordList){
      new DoWork(MainActivity.this).execute(word);
    }

    Intent intent = new Intent(MainActivity.this, WordsFound.class);
    intent.putExtra("searchResults",searchedText);
    startActivity(intent);

  }
});

让我们剖析代码。以下代码没问题。这是点击监听器的常用代码:

findViewById(R.id.btnSearch).setOnClickListener(new View.OnClickListener(){       @覆盖       public void onClick(查看v){         ...       }

现在,我们从以下代码中查看正文代码:

for(String word: wordList){
  new DoWork(MainActivity.this).execute(word);
}

我们知道DoWork是一个执行异步过程的AsyncTask。因此,即使DoWork尚未完成其流程,也会执行下一个代码

让我们看下一个代码:

Intent intent = new Intent(MainActivity.this, WordsFound.class);
intent.putExtra("searchResults", searchedText);
startActivity(intent);

这里你把searchedText变量的额外信息放在onCreate中,该变量只用于:

searchText = new ArrayList<String>();

因此,在设置额外内容时,您将始终拥有空列表。

要克服空列表问题,您只需在DoWork完成其工作后发送额外信息。您可以尝试在setResult

中调用Intent