Java 如何初始化JSONArray并在其他方法中使用

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

我将初始化一个JSONArray并将其设置为一个方法的输入,该方法将JSONArray复制到ArrayList中

这是我的方法:

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