gpt4 book ai didi

java - ArrayList 返回 size() 零

转载 作者:行者123 更新时间:2023-12-01 11:16:03 25 4
gpt4 key购买 nike

mNewList 返回 size() 零,但它包含在 ListView、mListData.getContacts() 中显示的数据;返回通过互联网从服务器获取的 ArrayList,但这不是我在 ListView 中显示数据之前编写的问题。

ArrayList<String> mNewList = new ArrayList<String>();
mNewList = mListData.getContacts();
Log.i("ShowingListSize", ":" +mNewList.size());

adapter = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1,
mNewList);
mList.setAdapter(adapter);

ListData Class

public ArrayList<String> getContacts() {

// Fetch list data from the database
task = new LoadList();
calendar = Calendar.getInstance();
month = calendar.get(Calendar.MONTH);
year = calendar.get(Calendar.YEAR);
day = calendar.get(Calendar.DAY_OF_MONTH);
hour = calendar.get(Calendar.HOUR_OF_DAY);
minute = calendar.get(Calendar.MINUTE);
task.execute(new String[]{Integer.toString(day),
Integer.toString(month),
Integer.toString(year),
Integer.toString(hour),
Integer.toString(minute)});
try {
task.get(); // wait for task to finish
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mContacts;
}

protected void onPostExecute(String response) {
try {
if(response.equals("error")) {
return;
}

json = new JSONObject(response);
jsonArray = json.getJSONArray("result");
String number, id;

try{
for(int i=0; i<jsonArray.length(); i++) {
JSONObject arrayItems = jsonArray.getJSONObject(i);
number = arrayItems.getString("number");
id = arrayItems.getString("id");
mContacts.add("hello" +number);
mContacts.add("hello" +id);
}
}catch(Exception e){
e.printStackTrace();
}

} catch (JSONException e) {
e.printStackTrace();
}
}

最佳答案

您的 getContacts AsyncTask 在另一个线程中运行(如词源所示,异步运行)。您的列表会在该线程完成后更新,但您的日志记录与 AsyncTask 并行发生,因此在您记录大小时,列表确实不包含任何内容。稍后,当 AsyncTask 完成时,您就会看到列表中显示的内容。

这是一个可视化

主题:用户界面 ------------------------------------- ---------------------- 异步任务

........................ | .. ArrayList mNewList = new ...;

........................ | .. mNewList = mListData.getContacts();

........................ | .. AsyncTask::onBeforeExecute()

........................ | ...................................................... ……………… | .. AsyncTask::doInBackground 启动

........................ | .. Log.i(mNewList.size()); ...................................... | ..(仍在工作)

........................ | ...................................................... ……………… | .. AsyncTask::doInBackground 返回

........................ | ..AsyncTask::onPostExecute

........................ | .. mContacts.add(...) ...

........................ | ...

关于java - ArrayList 返回 size() 零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31811361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com