Java 如何初始化JSONArray并在其他方法中使用
我将初始化一个JSONArray并将其设置为一个方法的输入,该方法将JSONArray复制到ArrayList中 这是我的方法:Java 如何初始化JSONArray并在其他方法中使用,java,android,arrays,json,android-volley,Java,Android,Arrays,Json,Android Volley,我将初始化一个JSONArray并将其设置为一个方法的输入,该方法将JSONArray复制到ArrayList中 这是我的方法: public ArrayList<String> copyJSONArrayToArrayList(JSONArray jArray){ ArrayList<String> arrayList = new ArrayList<> (); for (int i = 0; i < jArray.length
public ArrayList<String> copyJSONArrayToArrayList(JSONArray jArray){
ArrayList<String> arrayList = new ArrayList<> ();
for (int i = 0; i < jArray.length(); i++) {
try {
arrayList.add(jArray.getJSONObject(i).getString("city"));
} catch (JSONException e) {
e.printStackTrace();
}
}
return arrayList;
}
二,
三,
四,
ArrayAdapter adapters rc=new ArrayAdapter(这是android.R.layout.simple_list_item_1,copyJSONArrayTorayList(jsonArray));
在第4行中,jsonArray为空
有什么想法吗 在
onResponse(String)
中获得回调之前,JSONArray
不会被实例化,因此在StringRequest
完成之前,JSONArray
将为null
。
而是将初始化移到回调中,如下所示:
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
StringRequest stringRequest = new StringRequest(Request.Method.GET, WS_GET_CITY, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
progressbar.setVisibility(View.GONE);
try {
jsonObject = new JSONObject(response);
jsonArray = jsonObject.getJSONArray("getCity");
ac_srccity = (AutoCompleteTextView) findViewById(R.id.ac_srccity);
ArrayAdapter<String> adapterSrc = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, copyJSONArrayToArrayList(jsonArray));
ac_srccity.setAdapter(adapterSrc);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "ERROR", Toast.LENGTH_SHORT).show();
progressbar.setVisibility(View.GONE);
}
});
queue.add(stringRequest);
RequestQueue queue=Volley.newRequestQueue(getApplicationContext());
StringRequest StringRequest=新建StringRequest(Request.Method.GET,WS_GET_CITY,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
progressbar.setVisibility(View.GONE);
试一试{
jsonObject=新的jsonObject(响应);
jsonArray=jsonObject.getJSONArray(“getCity”);
ac_srccity=(AutoCompleteTextView)findviewbyd(R.id.ac_srccity);
ArrayAdapter Adapters RC=新的ArrayAdapter(这是android.R.layout.simple_list_item_1,copyJSONArrayToArrayList(jsonArray));
ac_srccity.setAdapter(适配器RC);
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(getApplicationContext(),“ERROR”,Toast.LENGTH_SHORT.show();
progressbar.setVisibility(View.GONE);
}
});
添加(stringRequest);
下面的代码就是答案:
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
StringRequest stringRequest = new StringRequest(Request.Method.GET, WS_GET_CITY, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
progressbar.setVisibility(View.GONE);
try {
jsonObject = new JSONObject(response);
jsonArray = jsonObject.getJSONArray("getCity");
ArrayAdapter<String> adapterSrc = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, copyJSONArrayToArrayList(jsonArray));
ac_srccity.setAdapter(adapterSrc);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "ERROR", Toast.LENGTH_SHORT).show();
progressbar.setVisibility(View.GONE);
}
});
queue.add(stringRequest);
RequestQueue queue=Volley.newRequestQueue(getApplicationContext());
StringRequest StringRequest=新建StringRequest(Request.Method.GET,WS_GET_CITY,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
progressbar.setVisibility(View.GONE);
试一试{
jsonObject=新的jsonObject(响应);
jsonArray=jsonObject.getJSONArray(“getCity”);
ArrayAdapter Adapters RC=新的ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,CopyJSONArrayTorayList(jsonArray));
ac_srccity.setAdapter(适配器RC);
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(getApplicationContext(),“ERROR”,Toast.LENGTH_SHORT.show();
progressbar.setVisibility(View.GONE);
}
});
添加(stringRequest);
如果(jsonArray!=null){ArrayAdapter adapters rc=new ArrayAdapter(这个,android.R.layout.simple_list_item_1,copyJSONArrayToArrayList(jsonArray));ac_srccity.setAdapter(adapters rc);},您可以在设置适配器时执行空检查发布您的json响应,这将有助于查看类似于jsonObject.getJSONArray(“getCity”)的问题书籍
返回null。是的,它可以工作,但适配器中的“this”应该是“MainActivity.this”,很乐意提供帮助,欢迎使用堆栈溢出。Hi @ AlirezaNoorali如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。
queue.add(stringRequest);
ac_srccity = (AutoCompleteTextView) findViewById(R.id.ac_srccity);
ArrayAdapter<String> adapterSrc = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, copyJSONArrayToArrayList(jsonArray));
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
StringRequest stringRequest = new StringRequest(Request.Method.GET, WS_GET_CITY, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
progressbar.setVisibility(View.GONE);
try {
jsonObject = new JSONObject(response);
jsonArray = jsonObject.getJSONArray("getCity");
ac_srccity = (AutoCompleteTextView) findViewById(R.id.ac_srccity);
ArrayAdapter<String> adapterSrc = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, copyJSONArrayToArrayList(jsonArray));
ac_srccity.setAdapter(adapterSrc);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "ERROR", Toast.LENGTH_SHORT).show();
progressbar.setVisibility(View.GONE);
}
});
queue.add(stringRequest);
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
StringRequest stringRequest = new StringRequest(Request.Method.GET, WS_GET_CITY, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
progressbar.setVisibility(View.GONE);
try {
jsonObject = new JSONObject(response);
jsonArray = jsonObject.getJSONArray("getCity");
ArrayAdapter<String> adapterSrc = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, copyJSONArrayToArrayList(jsonArray));
ac_srccity.setAdapter(adapterSrc);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "ERROR", Toast.LENGTH_SHORT).show();
progressbar.setVisibility(View.GONE);
}
});
queue.add(stringRequest);