如果我设置变量,为什么我在主活动中没有值?



所以我有以下类和函数等。

public class shitson extends AsyncTask<Void, Void, ArrayList<String>> {
ArrayList<String> tmp = new ArrayList<>();
private DiaryActivity activity = new DiaryActivity();
public shitson(DiaryActivity diaryActivity) {
activity = diaryActivity;
}
protected ArrayList<String> doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
String url2 = "https://..............";
String jsonStr = sh.makeServiceCall(url2);
if (jsonStr != null) {
try {
JSONArray urlOfURLs = new JSONArray(jsonStr);
for (int i = 0; i < urlOfURLs.length(); i++) {
JSONObject JSONURL = urlOfURLs.getJSONObject(i);
String url = JSONURL.getString("url");
tmp.add(url);
activity.addItem(url);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
return tmp;
}
@Override
protected void onPostExecute(ArrayList<String> strings) {
super.onPostExecute(strings);
activity.setList(tmp);
}
public void writeout() {
for (String i : tmp) {
Log.e("-0-0-0-0-0-0-0-", i);
}
}
}

主要活动:

public class DiaryActivity extends AppCompatActivity {
private ArrayList<String> allURL = new ArrayList<>();
public void writeOut() {
for (String i : allURL) {
Log.e("123456789", i);
}
}
public void setList(ArrayList<String> list) {
this.allURL = list;
}
private void fireYourAsyncTask() {
new shitson(this).execute();
writeOut();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diary);
fireYourAsyncTask();
}

我建立了"tmp"列表,但在 activity.setList(tmp( 之后,我在主活动中没有获得任何数据。在中.java"tmp"列表包含所有项目,但 setList 函数不起作用,所以我无法使用列表......虽然我的应用程序取决于我从 json 获得的信息......由于此错误,我无法在我的应用程序上制作任何有用的东西......

Asynctask是一个异步调用(从名称上很明显?(,这意味着它不会阻塞UI线程。你在执行后立即调用 writeOut((。所以 allUrl 数组列表仍然是空的(而 shitson 正在另一个线程上执行 json 操作(。将 writeOut(( 调用移动到 shitson 的 onPostExecute 中:

@Override
protected void onPostExecute(ArrayList<String> strings) {
super.onPostExecute(strings);
activity.setList(tmp);
activity.writeOut();
}

最新更新