gpt4 book ai didi

android - 网络响应为空的 Volley 服务器错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:31 24 4
gpt4 key购买 nike

每次我尝试对 Volley 使用 POST 方法时,我都会遇到严重错误。我在 getCause 中得到空值,在 getNetworkResponse.toString() 中得到一些默认值。

如果我使用 GET 方法,这工作正常(我从我的 url 得到响应)。

有人能帮我做什么吗?

    Map<String, String> jsonParams = new HashMap<String, String>();
jsonParams.put("teststr", "abd");

RequestQueue requestQueue = VolleySingleton.getInstance().getRequestQueue();
JsonObjectRequest request = new JsonObjectRequest(
Request.Method.POST,
url,
new JSONObject(jsonParams),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {

try {
Toast.makeText(getApplicationContext(), "Success"+response.toString(), Toast.LENGTH_LONG).show();
}catch(Exception e){
Toast.makeText(getApplicationContext(), "JSON ERROR", Toast.LENGTH_LONG).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("abd", "Error: " + error
+ ">>" + error.networkResponse.statusCode
+ ">>" + error.networkResponse.data
+ ">>" + error.getCause()
+ ">>" + error.getMessage());
}
}) {

@Override
protected Map<String,String> getParams() {
HashMap<String, String> params = new HashMap<String, String>();
params.put("key", "value");
return params;
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json; charset=utf-8");
return headers;
}
};
requestQueue.add(request);

错误日志:

Error: Error: com.android.volley.ServerError>>404>>[B@42b1e0d0>>null>>null

更新:networkResponse.statusCode 为 404,尽管 url 是可访问的(如果我只使用 GET 方法则返回数据)。如果我在 POST 方法中删除标题部分,仍然是一样的。

网址:

<?php
$response = array();

$jsonString = file_get_contents('php://input');
$jsonObj = json_decode($jsonString, true);

if(!isset($jsonObj['teststr'])){
$response["msg"] = "No data.";
}else{
$response["msg"] = "Success: ".$jsonObj['teststr'];
}
echo json_encode($response);
?>

最佳答案

问题是你的队列。将您的截击代码更改为:

 RequestQueue queue = Volley.newRequestQueue(this);
String URL = EndPoints.BASE_URL + "/call";
StringRequest request = new StringRequest(Request.Method.POST, URL,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {

Log.d("onResponse", response);

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

NetworkResponse response = error.networkResponse;
String errorMsg = "";
if(response != null && response.data != null){
String errorString = new String(response.data);
Log.i("log error", errorString);
}
}
}
) {
@Override
protected Map<String, String> getParams()
{

Map<String, String> params = new HashMap<String, String>();
params.put("key_1","value_1");
params.put("key_2", "value_2");
Log.i("sending ", params.toString());

return params;
}

};


// Add the realibility on the connection.
request.setRetryPolicy(new DefaultRetryPolicy(10000, 1, 1.0f));

// Start the request immediately
queue.add(request);

和你的 php (laravel) 代码:

    $response['success'] = true;
$response['user']['tell'] = $user->tell;
$response['user']['code'] = $user->code;
$response['user']['time'] = $time;
$response['user']['register_state'] = '1'
return response()->json($response, 200);

关于android - 网络响应为空的 Volley 服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30227842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com