当前位置: 首页 > 知识库问答 >
问题:

Android系统截击的返回响应[副本]

钱哲茂
2023-03-14
public static void communicate(final Context context, String url, final String typeResponse, final Intent intent) {
    RequestQueue queue = Volley.newRequestQueue(context);

    RequestFuture<String> future = RequestFuture.newFuture();
    StringRequest stringRequest = new StringRequest(Request.Method.POST, BASE_URL + url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            //Toast.makeText(context, response, Toast.LENGTH_SHORT).show();
            Bundle bundle = new Bundle();
            switch (typeResponse) {
                case "text":
                    bundle.putString("response", response);
                    break;
                case "json":
                    try {
                        JSONObject jsonObject = new JSONObject(response);
                        JSONArray names = jsonObject.names();
                        for (int i = 0; i < names.length(); i++) {
                            //Toast.makeText(context, names.getString(i), Toast.LENGTH_SHORT).show();
                            bundle.putString(names.getString(i), jsonObject.getString(names.getString(i)));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    break;
            }

            intent.putExtras(bundle);
            context.startActivity(intent);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(context, "error", Toast.LENGTH_SHORT).show();
        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("test", "hi!!");
            return params;
        }
    };
    queue.add(stringRequest);
}
Bundle myBundle = communicate('httl://qwe.asd', 'json')

谢了。

共有1个答案

暨弘懿
2023-03-14

Volley请求是异步的,所以我建议你把你的onResponse其他函数放在里面来处理你的bundle。此外,您还可以创建一个接口,以便在其他地方发送响应。像这样的东西

接口

 public interface onResponseCallback {
  void onResponse(Bundle bundle);
}

活动性

      public MyActivity extends AppCompatActivity implements onResponseCallback{


        public void onCreate(Bundle....){
    MyRequest myrequest = new MyRequest(this);
        ..}

        public void onResponse(Bundle bundle){
        //bundle argument is your response from request,
        // do some with your response
Intent intent = new Intent....
intent.putExtras(bundle);
            startActivity(intent);
        }


        }
public class MyRequest{

OnResponseCallback onResponseCallback= null;

public MyRequest(onResponseCallback onResponseCallback)
this.onResponseCallback = onResponseCallback;
}

public void communicate(final Context context, String url, final String typeResponse, final Intent intent) {
    RequestQueue queue = Volley.newRequestQueue(context);

    RequestFuture<String> future = RequestFuture.newFuture();
    StringRequest stringRequest = new StringRequest(Request.Method.POST, BASE_URL + url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            //Toast.makeText(context, response, Toast.LENGTH_SHORT).show();
            Bundle bundle = new Bundle();
            switch (typeResponse) {
                case "text":
                    bundle.putString("response", response);
                    break;
                case "json":
                    try {
                        JSONObject jsonObject = new JSONObject(response);
                        JSONArray names = jsonObject.names();
                        for (int i = 0; i < names.length(); i++) {
                            //Toast.makeText(context, names.getString(i), Toast.LENGTH_SHORT).show();
                            bundle.putString(names.getString(i), jsonObject.getString(names.getString(i)));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    break;
            }
             onResponseCallback.onResponse(bundle);   
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(context, "error", Toast.LENGTH_SHORT).show();
        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("test", "hi!!");
            return params;
        }
    };
    queue.add(stringRequest);
}

}
 类似资料:
  • 我想在我的代码中使用Volley,我应该在下面的响应中使用哪种请求类型,我不明白。URL:::http://localhost/api/product/read.php

  • 当我在android截击请求的OneErrorRepsonse中收到错误时,我想重试该请求。我怎样才能做到这一点?

  • 我正在使用截击来管理我的应用程序。有时,当响应很大时,我会在没有太多RAM的设备上获得OOM。我不确定如何解决这个问题。我知道Volley会将其响应存储在内存中,但我的应用程序太多地围绕着Volley,切换起来会很痛苦。我在使用改装时也遇到了问题。我尝试过使用JsonReader,但它似乎仍在发生。我有一个用于截击的自定义请求。它返回一个Gson JsonObject。这是我目前的代码,当响应数据

  • 问题内容: 我正在寻找一种方法来返回我在loopJ AsyncHttpClient onFinish或onSuccess或onFailure中得到的响应。截至目前,我有这段代码: 当我调用代码时: 在onSuccess或onFailure方法完成http发布之前,我得到了 JSONException 。 我注意到,在第一次调用时:Log.e(“ Exception”,“ JSONException

  • 我正在寻找一种方法来返回我在loopJ、AsyncHttpClient、onFinish或onSuccess或onfailure中得到的响应。到现在为止,我有这段代码: 我注意到,在第一次调用时:log.e(“exception”,“jsonexception”+e.toString());正在进行日志记录,然后是log.d(“onSuccess:”,jsonString);当它们处于同步状态时记

  • 我正在使用截击与API交互。我需要向返回JSON数组的服务发送post请求(带参数)。 我的Api代码有这样一个功能: 公共函数添加($tripData){ 我只需要把params放进去。将(“数据”,数据)放入以下类型的数组中: 所以它可以用作:$obj=new Myclass;$var=$ob- 自动生成方法存根