在Android中检索AsyncTask方法内的值

时间:2014-02-08 09:39:35

标签: android android-asynctask

我正在实现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方法中处理的值?

2 个答案:

答案 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

的结果部分中定义的字符串(此处)或WhatEver

希望这可以帮助