Home > Net >  how to return JSONArray from method using volley?
how to return JSONArray from method using volley?

Time:08-27

I'm trying to return JSONArray on my method.

I want to see

String test = getremseat("20220827", "0671801", "3112001").toString();`        
Log.i("test", test);'

but result is I/test: []

I think getremseat method does not return because of queue.add(req); how can I return JSONArray from the method using Volley?

MainActivity.java:

package com.example.terapi3;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;


import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;

import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate (Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String test = getremseat("20220827", "0671801", "3112001").toString();
        Log.i("test", test);
    }

    public JSONArray getremseat (String timDte, String terFrI, String terToI) {
     /*
        String timDte = "20220826";
        String terFrI = "0671801";
        String terToI = "3112001";
    */

        JSONArray ja = new JSONArray();

        // GET requset url
        String url = "https://apigw.tmoney.co.kr:5556/gateway/xzzIbtListGet/v1";
        String timTimI = "0000";  //

        RequestQueue queue = Volley.newRequestQueue(this);


        JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, url   "/ibt_list"   "/"   timDte   "/"   timTimI   "/"   terFrI   "/"   terToI   "/9/0",
                null, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {

                try {
                    JSONArray jsonArray = response.getJSONObject("response").getJSONArray("LINE_LIST");


                    for (int a = 0; a < jsonArray.length(); a  ) {
                        JSONObject jo = jsonArray.getJSONObject(a);

                        JSONObject joo = new JSONObject();
                        joo.put("TIM_TIM", jo.getString("TIM_TIM"));
                        joo.put("LIN_TIM", jo.getString("LIN_TIM"));
                        joo.put("REM_CNT", jo.getString("REM_CNT"));

                        ja.put(joo);

                    }
                    

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

        }, new Response.ErrorListener() {
            @Override
            public void one rrorResponse(VolleyError error) {
                Log.e("e", "Site Info Error: "   error.getMessage());
            }
        }) {
            // header
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("x-Gateway-APIKey", "MY PERSONAL KEY");
                return headers;
            }


        };


        queue.add(req);
        return ja; // i want to return this
    }

}

And, I also want return JSONArray to other package.

CodePudding user response:

You're getting an empty JSONArray because you're logging in before the API gives the response.

You can solve this problem by making a callback method to call after you get the API response.

Example

onCreate

private String test = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getremseat("20220827", "0671801", "3112001").toString();
}

getremseat

. . .

for (int a = 0; a < jsonArray.length(); a  ) {
      JSONObject jo = jsonArray.getJSONObject(a);

      JSONObject joo = new JSONObject();
      joo.put("TIM_TIM", jo.getString("TIM_TIM"));
      joo.put("LIN_TIM", jo.getString("LIN_TIM"));
      joo.put("REM_CNT", jo.getString("REM_CNT"));
      ja.put(joo);
}
test = ja.toString(); <-----
onResult(ja);         <-----

. . .

onResult

public void onResult (JSONArray jsonArray){
    Log.d("tag", jsonArray.toString());
}
  • Related