volley 调用php接口,使用Volley发送帖子请求并使用PHP接收
我正在嘗試在我的項(xiàng)目中使用volley來處理我的所有HTTP請求,因?yàn)閾?jù)我所知,這是最高效的請求。因此,我通過遵循此AndroidHive教程開始學(xué)習(xí)排球。
我的第一個(gè)GET請求成功。然后我轉(zhuǎn)到POST請求,但失敗了。我在Stack
Overflow上看到很多人在將volley的后期請求與PHP結(jié)合在一起時(shí)遇到問題。我相信我們無法使用常規(guī)方法來訪問它,$_POST[""]因?yàn)榱杩諏SON對象發(fā)送到我們指定的URL。
我嘗試了很多解決方案,但沒有成功。我猜應(yīng)該有一種將volley與PHP結(jié)合使用的簡單標(biāo)準(zhǔn)方法。所以我想知道我該怎么做才能在我的PHP代碼中接收volley發(fā)送的json對象。
還有如何檢查截?fù)羰欠裾娴脑诎l(fā)送JSON對象?
我的凌空代碼發(fā)送簡單的發(fā)帖請求:
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
url, null,
new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
pDialog.hide();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
pDialog.hide();
}
}) {
@Override
protected Map getParams() {
Map params = new HashMap();
params.put("name", "Droider");
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
我的用于接收json對象的PHP代碼:( 我很確定這是錯(cuò)誤的方式,我在PHP中不太好)
$jsonReceiveData = json_encode($_POST);
echo $jsonReceivedData;
?>
我也嘗試了很多在PHP中接受JSON對象的方法 echo file_get_contents('php://input');
結(jié)果
null
編輯(感謝格魯吉亞·貝納托斯的正確方法)
正如您提到的,我創(chuàng)建了該類,其類名稱CustomRequest如下:
import java.io.UnsupportedEncodingException;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
public class CustomRequest extends Request{
private Listener listener;
private Map params;
public CustomRequest(String url, Map params,
Listener reponseListener, ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.listener = reponseListener;
this.params = params;
}
public CustomRequest(int method, String url, Map params,
Listener reponseListener, ErrorListener errorListener) {
super(method, url, errorListener);
this.listener = reponseListener;
this.params = params;
}
@Override
protected Map getParams() throws com.android.volley.AuthFailureError {
return params;
};
@Override
protected void deliverResponse(JSONObject response) {
listener.onResponse(response);
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
}
現(xiàn)在在我的活動中,我打電話給以下人員:
String url = some valid url;
Map params = new HashMap();
params.put("name", "Droider");
CustomRequest jsObjRequest = new CustomRequest(Method.POST, url, params, new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
try {
Log.d("Response: ", response.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError response) {
Log.d("Response: ", response.toString());
}
});
AppController.getInstance().addToRequestQueue(jsObjRequest);
我的PHP代碼如下:
$name = $_POST["name"];
$j = array('name' =>$name);
echo json_encode($j);
?>
現(xiàn)在,它返回正確的值:
Droider
總結(jié)
以上是生活随笔為你收集整理的volley 调用php接口,使用Volley发送帖子请求并使用PHP接收的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中的for循环最多循环多少次,ph
- 下一篇: php渲染页面简单例子,微信小程序如何渲