所以我想打印响应的结果,然后使用gson为模型生成数据,但响应永远不会得到返回,因为调用了onResponse。!
如果你注意到Logcat,日志。我的回答没有显示。。!?但是在使用该请求的活动的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);
更新#1
网址http://clients.intertech.ps/raz/std.php
E/Volley: [1] 2.onErrorResponse: Error:
W/System.err: com.android.volley.ParseError: org.json.JSONException: End of input at character 0 of
W/System.err: at com.android.volley.toolbox.JsonObjectRequest.parseNetworkResponse(JsonObjectRequest.java:73)
W/System.err: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:123)
W/System.err: Caused by: org.json.JSONException: End of input at character 0 of
W/System.err: at org.json.JSONTokener.syntaxError(JSONTokener.java:449)
W/System.err: at org.json.JSONTokener.nextValue(JSONTokener.java:97)
W/System.err: at org.json.JSONObject.<init>(JSONObject.java:156)
W/System.err: at org.json.JSONObject.<init>(JSONObject.java:173)
W/System.err: at com.android.volley.toolbox.JsonObjectRequest.parseNetworkResponse(JsonObjectRequest.java:68)
W/System.err: ... 1 more
它不是StringRequest,您需要使用JsonObjectRequest,因为您的响应以{code>{code>
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);
}
});
尝试在getParams下添加:
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> params = new HashMap<String, String>();
params.put("Content-Type","application/x-www-form-urlencoded");
return params;
}
[更新]:
我不知道为什么齐射不起作用,但我更改为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());
}
});
您必须使用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
}
});
这个问题很久以前就被问到了,但我也有同样的问题,几个小时后我就开始用凌空抽射来解决这个问题
使用StringRequest
而不是JsonObjectRequest,出于任何原因,我对JOR有很多问题,我使用了@Oussema Aroua的getHeaders
函数
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;
}
};
.. 您将在onResponse中从服务器获得json响应
问题内容: 我正在使用凌空特技从REST api解析电影详细信息,并将解析后的数据保存在一个名为detailsMovies的对象的Arraylist中。但是我无法在onResponse方法之外访问ArrayList。我是Android新手,所以我不知道该怎么做。任何帮助表示赞赏! 这是代码: 问题答案: 在您的课程中定义一个接口并实现它。 因此,这里的简单技巧是与回调接口。
我见过龙卷风文档和示例,其中self.write方法被广泛用于在超文本标记语言上呈现一些值,其中POST请求在处理程序中运行。但是我找不到关于如何将响应返回给客户的清晰信息。 例如,我正在从我的客户端调用Tornado服务器上的POST请求。接受post请求的代码为: 有了这个,我可以找到cbtp的值,有了,我可以用HTML打印它。但是,相反,我想以JSON格式将这个值返回给客户机,比如我想知道如
我从这里获取信息实现了Struts2 REST API Struts2 Rest插件 Struts2中的restful插件中是否有返回自定义响应的方法。我做了所有必要的更改,如 从这个问题得到的。我仍然得到这个错误 如果我不添加上面的行,我仍然会得到相同的响应。 这是我在struts中提供的操作。xml: 这将满足所有请求,包括获取、发布、放置、更新。 在将post方法的返回类型从HttpHead
我必须做一个帖子,但我得到错误405 在本网站->http://177.66.89.34:8079/transparencia/#我需要迭代页面顶部的2个下拉菜单的选项。 首先,我会在“escolha o exercício”旁边加上选项:然后,我会在“escolha a entidade”旁边加上选项: 用下面的代码,我在“EscolhaoExercício:”上面写了一篇文章 我希望在pars
我正在尝试对远程服务器进行api调用,最初,我遇到以下错误:
问题内容: 我正在使用Node的模块发出 HTTP 请求,但是在上,返回的块似乎并不满足完整的请求响应。这是我的代码: 有没有办法在结束请求之前等待完整的输出?难道我做错了什么?谢谢! 问题答案: 您还应该收听“结束”事件