2017-04-19 79 views
-1

我试图使用Volley库到PHP服务器的JSON请求,但由于某种原因服务器没有收到我发送的JSON对象,它以空字符串响应。 这里是我的代码Android排球 - 无法做POST与JSON请求,得到空响应

import android.content.Context; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response.Listener; 
import com.android.volley.Response.ErrorListener; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.Volley; 
import org.json.JSONException; 
import org.json.JSONObject; 

public class MyVolley implements Listener, ErrorListener { 

    private static Context appContext; 

    public MyVolley(Context context) { 
     appContext = context; 
    } 

    public void stuff() throws JSONException { 
     RequestQueue queue = Volley.newRequestQueue(appContext); 
     JSONObject obj = new JSONObject(); 
     obj.put("param1", "assda"); 
     obj.put("param2", "fassfafsa"); 
     JsonObjectRequest stringRequest = new JsonObjectRequest(Request.Method.POST, "some url here", obj, this, this); 
     queue.add(stringRequest); 
    } 

    @Override 
    public void onResponse(Object response) { 
     System.out.println(response); 
    } 

    @Override 
    public void onErrorResponse(VolleyError error) { 
     System.out.println(error); 
    } 
} 

而且在执行时,这就是服务器接收

array (
    'Content-Type' => 'application/json; charset=utf-8', 
    'User-Agent' => 'pointless info here', 
    'Host' => 'some host here', 
    'Connection' => 'Keep-Alive', 
    'Accept-Encoding' => 'gzip', 
    'Content-Length' => '107', 
) array (
) array (
) 

为什么会是怎么回事?

回答

1

确保它不是服务器端的错误(例如尝试使用邮递员的服务)。

前段时间我个人面临同样的问题,将JsonObjectRequest改为StringRequest修复了我的问题。

看看这个链接: https://stackoverflow.com/a/31613565/7871886

现在我用Retrofit2而不是凌空...可能是一种选择。 快乐编码

1

不知道什么是你的问题,但是对于未来的Google:

我的问题是,我试图(工作)阅读形式$_POST,而不是php://input

全码:

的Java:

JSONObject jsonobj; // declared locally so that it destroys after serving its purpose 
jsonobj = new JSONObject(); 
try { 
    // adding some keys 
    jsonobj.put("new key", Math.random()); 
    jsonobj.put("weburl", "hashincludetechnology.com"); 
    // lets add some headers (nested JSON object) 
    JSONObject header = new JSONObject(); 
    header.put("devicemodel", android.os.Build.MODEL); // Device model 
    header.put("deviceVersion", android.os.Build.VERSION.RELEASE); // Device OS version 
    header.put("language", Locale.getDefault().getISO3Language()); // Language 
    jsonobj.put("header", header); 
    // Display the contents of the JSON objects 
    display.setText(jsonobj.toString(2)); 
} catch (JSONException ex) { 
    display.setText("Error Occurred while building JSON"); 
    ex.printStackTrace(); 
} 

JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, URL, jsonobj, new Response.Listener<JSONObject>() { 


    @Override 
    public void onResponse(JSONObject response) { 
     System.out.println("onResponse()"); 

     try { 
      result.setText("Response: " + response.toString(2)) 

      System.out.println("Response: " + response.toString(2)); 
     } catch (JSONException e) { 
      display.setText("Error Occurred while building JSON"); 
      e.printStackTrace(); 
     } 
     //to make sure it works backwards as well 

    } 
}, new Response.ErrorListener() { 

    @Override 
    public void onErrorResponse(VolleyError error) { 
     System.out.println("onErrorResponse()"); 
     System.out.println(error.toString()); 


    } 
}); 


System.out.println("After the request is made"); 
// Add the request to the RequestQueue. 
queue.add(jsObjRequest); 

澄清:displayresult是我用来在屏幕上显示数据的两个TextView对象,queue是Volley的请求队列。

PHP:

$inp = json_decode(file_get_contents('php://input')); //$input now contains the jsonobj 
echo json_encode(["foo"=>"bar","input"=>$inp]); //to make sure we received the json and to test the response handling 

您的Android显示器应该输出做某事。如:

{ 
    "foo":"bar", 
    "input":{ 
     "new key":0.8523024722406781, 
     "weburl":"hashincludetechnology.com", 
     "header": { 
      "devicemodel":"Android SDK built for x86", 
      "deviceVersion":"7.1", 
      "language":"eng" 
     } 
    } 
} 
相关问题