【发布时间】:2019-02-07 20:07:44
【问题描述】:
我有一个 CardsParser 类,它解析网页并返回一个带有 WordCard 对象的 ArrayList。然后对象显示在 TextView 中。
第一个请求总是可以的。但后来我得到了和第一次一样的结果。我的 TextView 清除,新请求运行,我总是从第一个 ArrayList 获取对象。
我发现 onPostExecute 方法总是获取相同的 ArrayList 作为参数,但我不知道为什么,因为我每次都创建新的 CardsParser 和 doInBackground 方法得到正确的参数。
提前致谢。
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
EditText editText;
Button srchBtn;
TextView foundWords;
CardsParser cardsParser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
srchBtn = findViewById(R.id.srchBtn);
srchBtn.setOnClickListener(this);
foundWords = findViewById(R.id.foundWords);
foundWords.setMovementMethod(new ScrollingMovementMethod());
}
private class AsyncRequest extends AsyncTask<String, Void, ArrayList<WordCard>> {
@Override
protected ArrayList<WordCard> doInBackground(String... args) {
cardsParser = new CardsParser();
return cardsParser.parse(editText.getText().toString());
}
@Override
protected void onPostExecute(ArrayList<WordCard> cards) {
for (WordCard card : cards) {
foundWords.append(card.word);
foundWords.append("\n");
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.srchBtn:
foundWords.setText("");
new AsyncRequest().execute();
break;
}
}
【问题讨论】:
-
不确定是否有帮助,但请避免从 doInBackground 中引用 UI 对象。通过 AsyncTask 的执行参数提供 EditText 字符串。
-
@Lino 我试过了,但没有帮助
标签: java android arraylist android-asynctask