注意:由于我是第一次使用面向对象编程和android工作室,所以我的术语表现不佳。
在android studio中,我为JSON提取任务创建了一个类。 (我不会在背景覆盖中包含do。)
public class jsonTasks extends AsyncTask<String, String, String> {
public interface AsyncResponse {
void processFinish(String output);
}
private AsyncResponse delegate = null;
jsonTasks(AsyncResponse delegate){
this.delegate = delegate;
}
@Override
protected void onPostExecute(String result) {
delegate.processFinish(result);
}
现在我的活动:
public class activity extends Activity {
// in here I've declared the string variable
String valuableInfo;
// FIRST TASK
jsonTasks asyncTask = new jsonTasks(new jsonTasks.AsyncResponse() {
@Override
public void processFinish(String output) {
String TAG = activity.class.getSimpleName();
JSONObject info;
//i do stuff with the json here
//i set the textboxes normally
txtSumName.setText(sumInfo.getString("name"));
//but setting the string valuableInfo is not working
valuableInfo = "info I took from json operation"
});
// and here I execute
asyncTask.execute("url");
// SECOND TASK
jsonTasks asyncTask2 = new .... {
.................
}
asyncTask2.execute("https://example.com/" + valuableInfo);
}
我希望在另一个&#34; asyncTask2&#34;中使用该变量。使用URL上的valuableInfo继续提取。
当我运行第二个&#34; asyncTask2&#34;时,变量总是为空。
答案 0 :(得分:3)
AsyncTask异步执行操作。这意味着您不会立即得到结果,您必须等到它完成才能使用valueableInfo
。您可以覆盖一种方法,称为onPostExecute
。这将在您的任务完成后以及信息可用时触发。在这里执行你的第二个任务,那时它不会为空。
或许也可以合并这两个任务?