繁体   English   中英

如何使用凌空从方法返回 JSONArray?

[英]how to return JSONArray from method using volley?

我正在尝试在我的方法上返回JSONArray

我想看看

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

但结果是I/test: []

我认为getremseat方法不会因为queue.add(req);而返回如何从使用 Volley 的方法返回JSONArray

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 onErrorResponse(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
    }

}

而且,我还想将JSONArray返回给其他 package。

您得到一个空的 JSONArray,因为您在 API 给出响应之前登录。

您可以通过在收到 API 响应后调用回调方法来解决此问题。

例子

创建

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM