Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 截击Post请求在onResponse内不返回响应_Java_Android_Json_Post_Android Volley - Fatal编程技术网

Java 截击Post请求在onResponse内不返回响应

Java 截击Post请求在onResponse内不返回响应,java,android,json,post,android-volley,Java,Android,Json,Post,Android Volley,所以我想打印响应的结果,然后使用gson为模型生成数据,但是响应永远不会返回,直到调用onResponse 如果您注意到Logcat,则log.i Inner onResponse没有显示。。!?但是在使用此请求的活动的onSuccess中,它通常会显示日志,但是如果日志包含响应对象,它就不会显示非常奇怪且没有任何意义的对象 Logcat I/getUrl:: http://1925.232.55/login.php I/getParams:: {username =samy, password

所以我想打印响应的结果,然后使用gson为模型生成数据,但是响应永远不会返回,直到调用onResponse

如果您注意到Logcat,则log.i Inner onResponse没有显示。。!?但是在使用此请求的活动的onSuccess中,它通常会显示日志,但是如果日志包含响应对象,它就不会显示非常奇怪且没有任何意义的对象

Logcat

I/getUrl:: http://1925.232.55/login.php
I/getParams:: {username =samy, password=123456}
D/libc: [NET] android_getaddrinfofornetcontext+,hn 20(0x6),sn(),hints(known),family 0,flags 1024, proc=com...
D/libc: [NET] android_getaddrinfo_proxy get netid:0
D/libc: [NET] android_getaddrinfo_proxy-, success
I/onSuccess:: check /* this log inside the Activity which uses this request */
我尝试使用具有相同url和参数的PostMan测试请求 它会正常返回json响应

邮递员回应

{
    "status": "success",
    "user_id": "10",
    "user_name": "samy",
    "full_name": "samy samy",
    "picture": "st_pictures/IMG_085207.jpg",
    "level": "1",
    "school": "NY School",
    "city": "NY",
    "class": "6",
    "age": "22",
    "teacher": "2",
    "token": "f808e758sdfsdfsf162dbdfcf88e3dc8a96"
}
请求代码

 final RequestQueue queue = Volley.newRequestQueue(context);

      final StringRequest sr = new StringRequest(Request.Method.POST, getLoginURL(), new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
          Log.i("onResponse: ", response + "");
      requestResult.onSuccess(response);


      }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
      requestResult.onFail(error);

           VolleyLog.e("Error: ", error.getMessage());
          error.printStackTrace();
        }
      })
      {
        @Override
        protected Map<String, String> getParams() {
          Map<String, String> params = new HashMap<String, String>();
          params.put("username ", un);
          params.put("password", pass);
          Log.i( "getParams: ", params.toString());
          return params;
        }

        @Override
        public byte[] getBody() throws AuthFailureError {
          Log.i( "getUrl: ",getUrl());
          return super.getBody();

        }
      }
      ;

      queue.add(sr);

它不是一个
StringRequest
您需要使用
JsonObjectRequest
因为您的响应以
{

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
                url, null,
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d(TAG, response.toString());
                       requestResult.onSuccess(response);
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d(TAG, "Error: " + error.getMessage());
                        requestResult.onFail(error);
                    }
                });
[更新]:

我不知道为什么with volley不起作用,但我改成了ion,它起作用了:

Ion.with(this)
                .load("http://clients.intertech.ps/raz/std.php")
                .setBodyParameter("username", "layal")
                .setBodyParameter("password", "123456")
                .asJsonObject()
                .setCallback(new FutureCallback<JsonObject>() {
                    @Override
                    public void onCompleted(Exception e, JsonObject jsonObject) {
                        Log.e("TAG", "onCompleted: " + jsonObject.toString());
                    }
                });
Ion.with(这个)
.加载(“http://clients.intertech.ps/raz/std.php")
.setBodyParameter(“用户名”、“layal”)
.setBodyParameter(“密码”,“123456”)
.asJsonObject()
.setCallback(新的FutureCallback(){
@凌驾
未完成公共无效(异常e,JsonObject JsonObject){
Log.e(“TAG”,“onCompleted:+jsonObject.toString());
}
});

您必须使用
JsonObjectRequest
,如下所示:

HashMap<String, String> params = new HashMap<String, String>();
params.put("username","samy");
params.put("password","123456");

JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params),
 new Response.Listener<JSONObject>() {
       @Override
       public void onResponse(JSONObject response) {
           Gson gson = new Gson();
           YourClass yourClass = gson.fromJson(response.toString(), yourClass.class);
       }
   }, new Response.ErrorListener() {
       @Override
       public void onErrorResponse(VolleyError error) {
            //error
       }
   });
HashMap params=newhashmap();
参数put(“用户名”、“samy”);
参数put(“密码”、“123456”);
JsonObjectRequest req=新JsonObjectRequest(URL,新JSONObject(参数),
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
Gson Gson=新的Gson();
YourClass YourClass=gson.fromJson(response.toString(),YourClass.class);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//错误
}
});

这个问题很久以前就被问到了,但我也遇到了同样的问题,几个小时后我用截击的方式解决了这个问题

使用了
StringRequest
而不是JsonObjectRequest,出于任何原因,我在JOR上遇到了很多问题,我使用了的
getHeaders
函数

final Response.Listener responseListener=new Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
Log.d(“响应”,String.valueOf(响应));
}
};
final Response.ErrorListener ErrorListener=新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//处理你的错误
}
};
StringRequest=新的StringRequest(request.Method.POST,url,
响应侦听器,错误侦听器){
@凌驾
受保护的映射getParams(){
Map params=新的HashMap();
//把你的情人送去邮局
返回参数;
}
@凌驾
公共映射getHeaders(){
Map params=新的HashMap();
params.put(“内容类型”,“应用程序/x-www-form-urlencoded”);//->这是关键
返回参数;
}
};

…您将在
onResponse

中从服务器获得json响应,第一个日志是``我想您的url是wrong@OussemaAroua这是一个虚拟的,你想让我用真实的替换它吗?不需要,我只是在检查它是不是真实的。如果我添加来自邮递员的回复,会对你有帮助吗?是的,如果你可以的话我将其更改为JsonObjectRequest,此错误显示:`E/Volley:[1]2.OneErrorResponse:Error:org.json.JSONException:End of character 0处的输入“来自服务器的响应是空的,它没有返回任何结果,同样的问题,请再次查看更新#1,我将发布真实的
url
,在邮递员中与PRAM一起使用,然后自己查看。!它的行为就像php文件没有获得用户名和密码一样,请尝试add
if(!isset($_POST[“username”])回显“空username”
我没有编写web端逻辑,它是这样给我的,我不知道是谁编写了web api!它不起作用,它给我的错误与
@oussemaroua
回答的错误相同,请参阅更新#1获取完整日志。你能再检查一下你的json响应吗,可能格式不太好再次查看更新#1,我将发布真正的
url
,u把它和婴儿车放在邮递员那个里,你们自己看看!我得到一个空白的回复,请用这个用户名“layal”代替samy
Ion.with(this)
                .load("http://clients.intertech.ps/raz/std.php")
                .setBodyParameter("username", "layal")
                .setBodyParameter("password", "123456")
                .asJsonObject()
                .setCallback(new FutureCallback<JsonObject>() {
                    @Override
                    public void onCompleted(Exception e, JsonObject jsonObject) {
                        Log.e("TAG", "onCompleted: " + jsonObject.toString());
                    }
                });
HashMap<String, String> params = new HashMap<String, String>();
params.put("username","samy");
params.put("password","123456");

JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params),
 new Response.Listener<JSONObject>() {
       @Override
       public void onResponse(JSONObject response) {
           Gson gson = new Gson();
           YourClass yourClass = gson.fromJson(response.toString(), yourClass.class);
       }
   }, new Response.ErrorListener() {
       @Override
       public void onErrorResponse(VolleyError error) {
            //error
       }
   });
final Response.Listener<String> responseListener = new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d("RESPONSE", String.valueOf(response));
        }
    };

final Response.ErrorListener errorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            //Handle your errors
        }
    };

StringRequest request = new StringRequest(Request.Method.POST, url,
            responseListener, errorListener) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<>();
            //Put your params for post
            return params;
        }

        @Override
        public Map<String, String> getHeaders() {
            Map<String,String> params = new HashMap<>();
            params.put("Content-Type","application/x-www-form-urlencoded"); //-> this is the key
            return params;
        }
    };