在我的Android应用中,我有一个活动,使用以下代码AsyncTask<Void, Void, Void>
执行名为Scan
的{{1}}。
在new Scan().execute();
方法中,它启动一个进度对话框,在它从DynamoDB扫描表的onPreExecute()
方法上,在doInBackground(Void... voids)
方法上,它取消了进度对话框,并且使用自定义onPostExecute(Void aVoid)
类在ListView中查看数据库扫描的结果。
当我打开活动时,一切都运行良好,但当我按下后退按钮并再次输入活动时,只有BaseAdapter
和onPreExecute()
方法正在执行,而{{{ 1}}没有被执行,因此它只显示和取消进度对话框,屏幕上没有其他内容被查看。
我该如何解决这个问题?
代码:
onPostExecute(Void aVoid)
答案 0 :(得分:0)
无法找到任何消息的原因是我检查了消息的用户ID是否等于注册用户的用户ID。问题是它是从MainActivity.java
获取的,它是从Intent额外获得的,因此,当我离开活动时,变量已被删除。
我所做的是引用SharedPreferences
中的用户ID,然后突然发挥作用。
答案 1 :(得分:-1)
尝试在onPostExecute()方法中添加messages.notifyDataSetChanged();
。
或使用以下代码
MessagesListAdapter messages;
ListView messagesLv;
public static ArrayList<Message> arrayList;
public static ProgressDialog progressDialog;
public static DynamoDBScanExpression dbScanExpression;
public static List<Message> messageList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_messages);
messagesLv = (ListView) findViewById(R.id.messagesListView);
messages = new MessagesListAdapter(MinaActivity.this, arrayList);
messagesLv.setAdapter(messages);
new Scan().execute();
}
private class Scan extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(TestActivity.this);
progressDialog.setTitle(name);
progressDialog.setMessage("Searching for messages...");
progressDialog.setIndeterminate(false);
progressDialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
dbScanExpression = new DynamoDBScanExpression();
Condition condition = new Condition()
.withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue().withS(MainActivity.msgId));
dbScanExpression.addFilterCondition("msgId", condition);
messageList = MainActivity.mapper.scan(Message.class, dbScanExpression);
arrayList = new ArrayList<Message>();
for (Message msg : messageList) {
if (msg.getUserId() == null || msg.getUserId().equals(MainActivity.userId)) {
msg.setMsgId(msg.getMsgId());
msg.setDate(msg.getDate());
msg.setTime(msg.getTime());
msg.setMessage(msg.getMessage());
msg.setUserId(msg.getUserId());
arrayList.add(msg);
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (!messageList.isEmpty()) {
messages.notifyDataSetChanged();
progressDialog.dismiss();
} else {
TextView tv = (TextView) findViewById(R.id.noMessages);
tv.setVisibility(View.VISIBLE);
progressDialog.dismiss();
}
}
}