2017-04-19 80 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" 
     } 
    } 
} 
相關問題