如何从AsyncTask类(内部)向我从接收服务器的数据中添加元素到Array或ArrayList。
我尝试添加doInBackgroud()中的元素并将它们打印在onPostExecute()中,然后就可以了。
但是当我尝试在AsyncTask类之外访问它们时,Array和List都是空的。
代码: -
public String[][] mov_details ;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vpmovies);
mov_details=new String[NUM_OF_MOVIES][9];
new MyHttpMovies().execute();
Toast.makeText(this,mov_details[0][2],Toast.LENGTH_LONG).show(); //prints blank
doInBackgroud()和onPostExecute() -
for(int i=0; i < jsonArray.length(); i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
//parsing some json
mov_details[i][0] = (jsonObject.optString("name").toString());
mov_details[i][1] = (jsonObject.optString("lang").toString());
mov_details[i][2] = (jsonObject.optString("genre").toString());
.
.
.
.
return mov_details;
}
protected void onPostExecute(String[][] strings) {
super.onPostExecute(strings);
Toast.makeText(VPmovies.this,strings[0][1],Toast.LENGTH_LONG).show();
// prints successfully
}
答案 0 :(得分:0)
public class MainActivity extends AppCompatActivity {
ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public class fetchData extends AsyncTask<Void,Void,Void> {
@Override
protected Void onPreExecute() {
super.onPreExecute();
list = new ArrayList<String>();
}
@Override
protected Void onPostExecute(Void... params) {
...
list.add("bla bla");
...
return null;
}
}
}
答案 1 :(得分:0)
在publishProgress("data")
内使用doInBackgroung
,并将数据从AsyncTask
传递到Activity/Fragment
。请记住doInBackgroung
在单独的线程中运行,如果您将直接从doInBackgroung
调用某些方法而不是您的调用方法应在主线程中运行,则无法直接从doInBackgroung
更新主GUI。
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
// send data to your required location its recommended to use interfaces for communication
}
答案 2 :(得分:0)
只需在appspot.com
实例上使用get()
方法解决,该方法将返回AsyncTask背景线程的输出/结果。
AsyncTask
而不是在mov_details = new MyHttpMovies().execute().get(); //returns 2d array
中使用mov_details
变量,我使用了一些其他的2d数组变量只是AsyncTask。