2013-08-19 1 views
0

У меня есть строковый массив в моем классе, я пытаюсь использовать его в asynctask, но до того, как вы даже можете его запустить, строка в asynctask, где я использую массив, имеет ошибку, говорящую «не может быть разрешена переменная». Мне нужно использовать массив вне asynctask, поэтому я не могу просто сделать массив внутри asynctask.Android, java: как использовать общедоступные массивы в asynctasks?

Когда я наводил на ошибку ошибку, он дал мне два варианта: «Создать поле« myarray »в типе« myclass »или« Создать константу «myarray» в типе «myclass». оба будут избавляться от ошибки, но ни на самом деле не работают, потому что, когда я запускаю программу, я получаю еще одну ошибку, обе скажут «исключение нулевого указателя», но первый вариант даст мне ошибку в момент использования erray in асинхронная задача, второй вариант даст мне ошибку позже в этом процессе, когда другая функция в классе использует ее (функция без асинтеза). Даже если я прокомментирую часть в этой функции, где он использует массив, я все равно получаю исключение из null-указателя, но это происходит во время асинтезы, и я не понимаю, как эта ошибка не возникает, прежде чем я закомментировал функцию который использует массив, потому что это происходит после задачи async.

Я знаю, что это немного затянуто, мне просто нужно знать, как создать массив в классе, а затем использовать его внутри асинтеза, я попытался настроить свой массив как открытый, публичный статический финал и т. ничего не работает. пожалуйста помоги.

мой код невероятно длинный, поэтому я просто покажу несколько вещей ниже, первая строка - это то, как я определил/инициировал свой исходный массив String в своем классе перед onCreate, вторая и третья строки - автоматически сгенерированные параметры которые были заданы, когда я зависал над ошибкой, они находятся в том же порядке, в котором я объяснил их. Я, конечно, оставляю 2 из 3 комментариев, когда я запускаю его.

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

А затем ниже линии, где я использовать массив внутри AsyncTask, «с» из петли.

divyield[c]="anything"; 

ответ

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); 
     ... 

    } 
} 
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. 

В первом способе. Весь элемент имеет значение null. Потому что вы еще не назначили. (String является объект - он должен быть назначить перед использованием.)

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

Конечно, это самый лучший способ. Я не предлагаю вам использовать это.

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