Android AsyncTask中的doInBackground()方法不';当活动重新打开时,无法工作

Android AsyncTask中的doInBackground()方法不';当活动重新打开时,无法工作,android,android-asynctask,amazon-dynamodb,Android,Android Asynctask,Amazon Dynamodb,在我的Android应用程序中,我有一个活动,它使用以下代码执行名为Scan的AsyncTask任务:new Scan().execute() 在onPreExecute()方法中,它启动一个进度对话框;在doInBackground(Void…voids)方法中,它从DynamoDB扫描一个表;在onpostsecute(Void aVoid)方法中,它取消进度对话框,并使用自定义的BaseAdapter类在列表视图中查看数据库扫描的结果 当我打开活动时,一切都运行得很好,但是当我按下后退按钮

在我的Android应用程序中,我有一个活动,它使用以下代码执行名为
Scan
AsyncTask
任务:
new Scan().execute()

onPreExecute()
方法中,它启动一个进度对话框;在
doInBackground(Void…voids)
方法中,它从DynamoDB扫描一个表;在
onpostsecute(Void aVoid)
方法中,它取消进度对话框,并使用自定义的
BaseAdapter
类在列表视图中查看数据库扫描的结果

当我打开活动时,一切都运行得很好,但是当我按下后退按钮并再次输入活动时,只有
onPreExecute()
onPostExecute(Void aVoid)
方法正在执行,而
doInBackground(Void…voids)
没有执行,因此,它只是显示和取消进度对话框,而屏幕上没有看到其他内容

我怎样才能解决这个问题

代码:

MessagesListAdapter消息;
ListView消息SLV;
公共静态ArrayList ArrayList;
公共静态进程对话框;
公共静态发电机BSCANExpression dbScanExpression;
公共静态列表消息列表;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_消息);
新扫描().execute();
}
私有类扫描扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog=新建progressDialog(TestActivity.this);
progressDialog.setTitle(名称);
设置消息(“搜索消息…”);
progressDialog.setUndeterminate(false);
progressDialog.show();
}
@凌驾
受保护的空位背景(空位…空位){
dbScanExpression=新的DynamoDBScanExpression();
条件条件=新条件()
.带ComparisonOperator(ComparisonOperator.EQ)
.WithAttributeValue列表(新的AttributeValue().With(MainActivity.msgId));
dbScanExpression.addFilterCondition(“msgId”,条件);
messageList=MainActivity.mapper.scan(Message.class,dbScanExpression);
arrayList=新的arrayList();
用于(消息消息消息:消息列表){
如果(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);
}
}
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
如果(!messageList.isEmpty()){
messagesLv=(列表视图)findViewById(R.id.messagesListView);
messages=newmessagesListAdapter(MinaActivity.this,arrayList);
messagesLv.setAdapter(消息);
progressDialog.disclose();
}否则{
TextView tv=(TextView)findViewById(R.id.noMessages);
tv.setVisibility(View.VISIBLE);
progressDialog.disclose();
}
}
}

尝试添加
消息。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();
        }
    }
}
MessagesListAdapter消息;
ListView消息SLV;
公共静态ArrayList ArrayList;
公共静态进程对话框;
公共静态发电机BSCANExpression dbScanExpression;
公共静态列表消息列表;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_消息);
messagesLv=(列表视图)findViewById(R.id.messagesListView);
messages=newmessagesListAdapter(MinaActivity.this,arrayList);
messagesLv.setAdapter(消息);
新扫描().execute();
}
私有类扫描扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog=新建progressDialog(TestActivity.this);
progressDialog.setTitle(名称);
设置消息(“搜索消息…”);
progressDialog.setUndeterminate(false);
progressDialog.show();
}
@凌驾
受保护的空位背景(空位…空位){
dbScanExpression=新的DynamoDBScanExpression();
条件条件=新条件()
.带ComparisonOperator(ComparisonOperator.EQ)
.WithAttributeValue列表(新的AttributeValue().With(MainActivity.msgId));
dbScanExpression.addFilterCondition(“msgId”,条件);
messageList=MainActivity.mapper.scan(Message.class,dbScanExpression);
arrayList=新的arrayList();
用于(消息消息消息:消息列表){
如果(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);
}
}
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
如果(!messageList.isEmpty()){
messages.notifyDataSetChanged();
progressDialog.disclose();
}否则{
TextView tv=(TextView)findViewById(R.id.noMessages);
tv.setVisibility(View.VISIBLE);
progressDialog.disclose();
}
}
}

它找不到任何消息的原因是,我检查了消息的用户ID是否等于注册用户的用户ID。问题是它来自
M
    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();
        }
    }
}