Как присвоить значение глобальному массиву из внутреннего класса

#java #android #arrays

#java #Android #массивы

Вопрос:

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

 public class TestActivity extends AppCompatActivity {
    QuizFormat[] quizFormatArray = new QuizFormat[0];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        ...
        getTest();
        Log.i("size","Array: " quizFormatArray.length);
        try {
            for (QuizFormat qf: quizFormatArray) {
                Log.i("que",qf.getQuestion());
            }
        } catch (NullPointerException e){
            e.printStackTrace();
        }
    }
    
    public void getTest(){
        class FetchData extends AsyncTask<Void,Void,String> {
            TestActivity ta = new TestActivity();
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                ll.setVisibility(View.GONE);
                try {
                    JSONObject obj = new JSONObject(s);
                    JSONArray testArray = obj.getJSONArray("test");
                    for (int i=0; i<testArray.length(); i  ){
                        JSONObject testObj = testArray.getJSONObject(i);
                        JSONObject optionsObj = testObj.getJSONObject("options");
                        
                        String[] options = new String[4];
                        options[0] = optionsObj.getString("opt1");
                        options[1] = optionsObj.getString("opt2");
                        options[2] = optionsObj.getString("opt3");
                        options[3] = optionsObj.getString("opt4");
                        
                        ta.quizFormatArray = Arrays.copyOf(ta.quizFormatArray,ta.quizFormatArray.length 1);
                        ta.quizFormatArray[ta.quizFormatArray.length-1] = new QuizFormat(testObj.getInt("que_id"),
                                                                                        testObj.getString("question"),
                                                                                        options,
                                                                                        testObj.getString("answer"));
                    }
                } catch (JSONException e){
                    e.printStackTrace();
                }
            }
        }
        FetchData fd = new FetchData();
        fd.execute();
    }
}
  

QuizFormatArray это класс POJO, который имеет атрибуты quiz с получателями, установщиками и параметризованными конструкторами следующим образом:

 public class QuizFormat {
    int id;
    String question;
    String[] options;
    String answer;

    public QuizFormat(int id, String question, String[] options, String answer) {
        this.id = id;
        this.question = question;
        this.options = options;
        this.answer = answer;
    }
    
    //Getters and Setters   
    ...
}
  

Я проверяю значение массива в logcat, но оно показывает 0, что означает, что элементы не вставлены.
Я пытался

  1. замена Array на ArrayList
  2. создание отдельного метода в классе TestActivity для получения массива из внутреннего класса и присвоения его глобальному массиву, но ничего из вышеперечисленного не сработало. Как я могу присвоить значение глобальному массиву?

Комментарии:

1. почему у каждого FetchData есть свой собственный TestActivity ta ?

2. @luk2302 Я просто попробовал это, чтобы убедиться, что это относится к правильному массиву, просто на всякий случай, bt все еще не работает

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

4. @luk2302 Я только что попробовал это, не создавая объект и напрямую ссылаясь на массив по его имени quizFormatArray , но не повезло

5. @luk2302 есть какие-нибудь советы о том, как этого добиться?