내 Android 앱에 AsyncTask<Void, Void, Void>
Scan
이라는 코드를 사용하는 작업이 있습니다 : new Scan().execute();
. onPreExecute()
방법에서 활동을 다시 열 때 AsyncTask의 doInBackground() 메소드가 작동하지 않습니다.
doInBackground(Void... voids)
방법에 진행 대화 상자를 시작하고
onPostExecute(Void aVoid)
방법에, 그것은 진행 대화 상자를 일축하고 사용하여 ListView에있는 DB의 검사 결과를 볼 정의
BaseAdapter
클래스입니다. 내가 활동을 열 때
, 모든 위대한 실행,하지만 난 뒤로 버튼을 누르고, 다시 활동을 입력 할 때 다음에만 onPreExecute()
doInBackground(Void... voids)
가 실행되지 않는하면서 onPostExecute(Void aVoid)
방법이 실행되고, 그 때문에 진행 대화 상자를 보여 주거나 닫을뿐 아무 것도 화면에서 보지 못합니다.
어떻게 해결할 수 있습니까?
코드 :() 메소드 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);
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()) {
messagesLv = (ListView) findViewById(R.id.messagesListView);
messages = new MessagesListAdapter(MinaActivity.this, arrayList);
messagesLv.setAdapter(messages);
progressDialog.dismiss();
} else {
TextView tv = (TextView) findViewById(R.id.noMessages);
tv.setVisibility(View.VISIBLE);
progressDialog.dismiss();
}
}
}
코드를 게시하십시오. – ADM
코드를 게시하십시오 .. – SaravInfern
'public static DynamoDBScanExpression dbScanExpression;'. 그것은 doInBackground의 로컬 변수 여야합니다. 그리고 그것을 고정시키지 마십시오! – greenapps