我正在实现JSON数组,我使用AsyncTask方法检索后台进程,
我有一个数组变量,它在OnCreate之前声明并用一些值
初始化String [] str=new String[100];
在for循环中解析json数组时存储在tat数组变量中
str[i]=c.getString(TAG_NAME);
存储完美,我也做了Log及其在logcat中的显示,
但问题是当我在我的函数之外使用“str”数组变量时,
void func()
{
List<String> top250 = new ArrayList<String>();
for(int x=0;x<str.length;x++)
{
top250.add(str[x]);
}
}
str变量只存储初始化内存的字符串“null”。
它存储“null”100次。
那么如何获取在AsyncTask内部的doInBackground方法中处理的值?
答案 0 :(得分:2)
您可以在post execute()
中返回字符串列表private class LongOperation extends AsyncTask<String, Void, List<String>> {
@Override
protected List<String> doInBackground(String... params) {
List<String> top250 = new ArrayList<String>();
for(int x=0;x<str.length;x++)
{
top250.add(str[x]);
}
return top250;
}
@Override
protected void onPostExecute(List<String> result) {
//validate result and assign to something useful like a field
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... values) {}
}
然后,您可以在验证后将结果分配给班级中的某个字段。
答案 1 :(得分:1)
修改强> Asyntask示例供参考Code and concept here。
我们知道AsynTask有三个参数
new `AsynTask < Params , Progress , Result >`
你可以这样做:
new AsyncTask<Void, Void, String>(){
@Override
protected String doInBackground(Void... params) {
//Parse your json here
//You will get this result into result of onPostExceute()
return json;
}
@Override
protected void onPostExecute(String result) {
//Use your result here
super.onPostExecute(result);
}
}.execute();
使用此功能,您可以获取您在AsynTask
希望这可以帮助