Пустой String array

Заметил что Volley загружает json не сразу. Как можно понять что мы получили все данные?

В строке 126. находится метод, выполняющий GET запрос и последующий парсинг. Сам же метод вызывается в строке 60.

Поскольку я паршу json в два String массива, а затем в другом классе вызываю метод getLength(); который возвращает длину main_name_rString. После чего происходит ошибка java.lang.NullPointerException: Attempt to get length of null array . При этом запрос выполняется и не выдает ошибку в виде Toast сообщения(строка 157).

Для примера в коде есть conectionBt.setText(String.valueOf(jsonArray_string_list.length()));(строка 136), являющийся textView. При нажатии на textView происходит вызов метода loadStrings(строка 126). На моменте вызова метода setText() происходит краш.

1. package com.example.dyplom;
2. 
3. import androidx.appcompat.app.AlertDialog;
4. import androidx.appcompat.app.AppCompatActivity;
5. import androidx.constraintlayout.widget.ConstraintLayout;
6. import androidx.core.content.ContextCompat;
7. 
8. import android.app.Activity;
9. import android.content.DialogInterface;
10. import android.content.Intent;
11. import android.os.Bundle;
12. import android.text.InputType;
13. import android.text.Layout;
14. import android.view.LayoutInflater;
15. import android.view.View;
16. import android.widget.AdapterView;
17. import android.widget.ArrayAdapter;
18. import android.widget.Button;
19. import android.widget.EditText;
20. import android.widget.RelativeLayout;
21. import android.widget.SeekBar;
22. import android.widget.Spinner;
23. import android.widget.TextView;
24. import android.widget.Toast;
25. 
26. import com.android.volley.Request;
27. import com.android.volley.RequestQueue;
28. import com.android.volley.Response;
29. import com.android.volley.VolleyError;
30. import com.android.volley.toolbox.JsonObjectRequest;
31. import com.android.volley.toolbox.Volley;
32. 
33. import org.json.JSONArray;
34. import org.json.JSONException;
35. import org.json.JSONObject;
36. 
37. import yuku.ambilwarna.AmbilWarnaDialog;
38. 
39. public class MainActivity extends AppCompatActivity {
40. 
41.     private TextView contrBt, conectionBt, text1;
42.     private String p_pass, p_login;
43.     String[] main_name_rString, main_id_rString;
44.     private RequestQueue mQueue;
45. 
46. 
47.     @Override
48.     protected void onCreate(Bundle savedInstanceState) {
49.         super.onCreate(savedInstanceState);
50.         setContentView(R.layout.activity_main);
51. 
52.         mQueue = Volley.newRequestQueue(this);
53. 
54.         TextView text1 = findViewById(R.id.texttt);
55. 
56.         TextView conectionBt = (TextView) findViewById(R.id.ConectBtn);
57.         conectionBt.setOnClickListener(new View.OnClickListener() {
58.             @Override
59.             public void onClick(View view) {
60.                 loadStrings();
61.             }
62.         });
63. 
64. 
65. 
66. 
67.         TextView contrBt = (TextView) findViewById(R.id.ControlBt);
68.         contrBt.setOnClickListener(new View.OnClickListener() {
69.             @Override
70.             public void onClick(View view) {
71.                 Intent ContStart = new Intent(MainActivity.this, Control.class);
72.                 startActivity(ContStart);
73.             }
74.         });
75. 
76.         TextView viewBt = (TextView) findViewById(R.id.ViewBtn);
77.         viewBt.setOnClickListener(new View.OnClickListener() {
78.             @Override
79.             public void onClick(View view) {
80.                 LayoutInflater inflater = getLayoutInflater();
81.                 View dialoglayout = inflater.inflate(R.layout.activity_add_rstring, null);
82.                 AlertDialog.Builder password_check  = new AlertDialog.Builder(MainActivity.this);
83. 
84.                 AlertDialog pas_check = password_check.create();
85. 
86.                 pas_check.setTitle("Введите текст");
87.                 pas_check.setView(dialoglayout);
88. 
89.                 pas_check.setButton(DialogInterface.BUTTON_POSITIVE, "Ok", new DialogInterface.OnClickListener() {
90.                     @Override
91.                     public void onClick(DialogInterface dialogInterface, int i) {
92. 
93.                         String p_login = ((EditText) dialoglayout.findViewById(R.id.loggin_login)).getText().toString();
94.                         String p_pasword = ((EditText) dialoglayout.findViewById(R.id.loggin_password)).getText().toString();
95.                         if (p_login.equals("Admin")   && p_pasword.equals("abc"))
96.                         {
97.                             Intent viewStart = new Intent(MainActivity.this, com.example.dyplom.View.class);
98.                             startActivity(viewStart);
99.                             pas_check.cancel();
100.                         } else {
101. 
102.                             ((EditText) dialoglayout.findViewById(R.id.loggin_password)).setText("");
103. 
104.                             Toast toast = Toast.makeText(getApplicationContext(),
105.                                     "Неправильный логин или пароль", Toast.LENGTH_SHORT);
106.                             toast.show();
107.                         }
108.                     }
109.                 });
110.                 pas_check.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
111.                     @Override
112.                     public void onClick(DialogInterface dialogInterface, int i) {
113.                         pas_check.cancel();
114.                     }
115.                 });
116.                 pas_check.show();
117.                 //Intent viewStart = new Intent(MainActivity.this, com.example.dyplom.View.class);
118.                // startActivity(viewStart);
119.             }
120.         });
121. 
122.     }
123. 
124. 
125. 
126.     private void loadStrings()
127.     {
128.         String url_head = "https://api.npoint.io/0a84a56ace112bd2cad1";
129.         JsonObjectRequest request_strings_list = new JsonObjectRequest(Request.Method.GET,url_head, null, new Response.Listener<JSONObject>() {
130.             @Override
131.             public void onResponse(JSONObject response) {
132.                 try {
133.                     JSONArray jsonArray_string_list = response.getJSONArray("strings_info");
134.                     main_name_rString = new String[jsonArray_string_list.length()];
135.                     main_id_rString = new String[jsonArray_string_list.length()];
136.                     text1.setText(String.valueOf(jsonArray_string_list.length()));
137.                     for (int i = 0; i < jsonArray_string_list.length();i++){
138.                         JSONObject string_params_string_list = jsonArray_string_list.getJSONObject(i);
139. 
140.                         String string_id = string_params_string_list.getString("string_id");
141.                         String string_name = string_params_string_list.getString("string_name");
142. 
143. 
144.                         main_name_rString[i] = string_name;
145.                         main_id_rString[i] = string_id;
146. 
147.                     }
148. 
149. 
150.                 } catch (JSONException e) {
151.                     e.printStackTrace();
152.                 }
153.             }
154.         }, new Response.ErrorListener() { // в случае возникновеня ошибки
155.             @Override
156.             public void onErrorResponse(VolleyError error) {
157.                 Toast.makeText(getApplicationContext(), "Не работает", Toast.LENGTH_SHORT).show();
158.                 error.printStackTrace();
159.             }
160.         });
161.         mQueue.add(request_strings_list);
162.     }
163. 
164.     public String getid(int i){return main_id_rString[i];}
165.     public String getname(int i){return main_name_rString[i];}
166.     public int getsize() {return main_id_rString.length;}
167. }

Ошибка выглядит следующим образом:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.dyplom, PID: 26698
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.example.dyplom.MainActivity$4.onResponse(MainActivity.java:134)
        at com.example.dyplom.MainActivity$4.onResponse(MainActivity.java:127)
        at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:90)
        at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Причем замечу, что при заполнении main_name_rString и main_id_rString не возникает краша приложения. Если убрать conectionBt.setText(String.valueOf(jsonArray_string_list.length())); метод выполнится "корректно", но при вызове метода, возвращающего длину main_name_rString и main_id_rString будет возникать ошибка java.lang.NullPointerException: Attempt to get length of null array


Ответы (0 шт):