#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, что означает, что элементы не вставлены.
Я пытался
- замена
Array
наArrayList
- создание отдельного метода в классе
TestActivity
для получения массива из внутреннего класса и присвоения его глобальному массиву, но ничего из вышеперечисленного не сработало. Как я могу присвоить значение глобальному массиву?
Комментарии:
1. почему у каждого
FetchData
есть свой собственныйTestActivity ta
?2. @luk2302 Я просто попробовал это, чтобы убедиться, что это относится к правильному массиву, просто на всякий случай, bt все еще не работает
3. Нет, вы делаете прямо противоположное этому, строка гарантирует, что вы всегда ссылаетесь на неправильный массив, потому что вы никогда не взаимодействуете с массивом действия, которое фактически вызывает
getTest
.4. @luk2302 Я только что попробовал это, не создавая объект и напрямую ссылаясь на массив по его имени
quizFormatArray
, но не повезло5. @luk2302 есть какие-нибудь советы о том, как этого добиться?