Android,java:如何在asynctasks中使用公共数组?

时间:2013-08-19 04:00:20

标签: android android-asynctask arrays

我的类中有一个字符串数组,我正在尝试在asynctask中使用它,但在能够运行之前,我使用数组的asynctask中的行有一个错误,说“无法解析为一个变量”。我需要在asynctask之外使用数组,所以我不能只在asynctask中创建数组。

当我将鼠标悬停在错误上时,它给了我两个选项,“在'myclass'类型中创建字段'myarray'”或者在'myclass'类型中创建常量'myarray'。两者都将摆脱错误,但实际上都没有工作,因为当我运行程序时我得到另一个错误,两者都会说“空指针异常”,但是第一个选项会在使用erray时给出错误在异步任务中,第二个选项会在后来的过程中给出错误,当时类中的另一个函数使用它(非asynctask函数)。即使我在该函数中注释掉它使用数组的部分,我仍然得到一个空指针异常,但它发生在asynctask期间,我不明白在我注释掉函数之前该错误是怎么回事使用该数组,因为这发生在异步任务之后。

我知道这有点抽出,我只需要知道如何在类中创建一个数组,然后在asynctask中使用它,我已经尝试将我的数组设置为public,public static final等,没有作品。请帮忙。

我的代码非常长,所以我将在下面展示一些内容,第一行是我在onCreate之前在我的类中定义/启动我的原始String数组,第二行和第三行是自动生成的选项当我徘徊在错误上时,他们按照相同的顺序给出了我的解释。当然,当我运行它时,我将3中的2个注释掉。

    public String[] divyeild = new String[1000];
    public String[] divyield;
    public static final String[] divyield = null;

然后下面的行是我在asynctask中使用数组的地方,'c'来自循环。

    divyield[c]="anything";

2 个答案:

答案 0 :(得分:0)

你可以这样

public class MainActivity extends Activity {
    private String[] divyeild = new String[1000];

    private class MyTask extends AsyncTask<Vois, Void, Void>{
        private String[] divyeild;

        public MyTask(String[] params){
             this.divyeild = params;
        }

        @Override
        protected Void doInBackground(Void... params) {
             /* You can use this.divyeild here*/
        }

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        MyTask myTask = new MyTask(divyeild);
        ...

    }
}

答案 1 :(得分:0)

public String[] divyeild = new String[1000]; // Work fine
public String[] divyield; // Doesn't work if you don't assign value
public static final String[] divyield = null; // Can't work because you can not re-assign value for this array.

第一种方式。所有项目都为空。因为你尚未分配。 (String是一个Object - 必须在使用前分配。)

for (int i = 0; i < divyeild.length; i++) {
    divyeild[i] = ""; // Assign empty string.
}

当然,这是最好的方法。我不建议你用这个。

if (divyeild != null) {
    // Please check null before use.
}