volley 调用php接口,使用Volley发送帖子请求并使用PHP接收

我正在尝试在我的项目中使用volley来处理我的所有HTTP请求,因为据我所知,这是最高效的请求。因此,我通过遵循此AndroidHive教程开始学习排球。

我的第一个GET请求成功。然后我转到POST请求,但失败了。我在Stack

Overflow上看到很多人在将volley的后期请求与PHP结合在一起时遇到问题。我相信我们无法使用常规方法来访问它,$_POST[""]因为凌空将JSON对象发送到我们指定的URL。

我尝试了很多解决方案,但没有成功。我猜应该有一种将volley与PHP结合使用的简单标准方法。所以我想知道我该怎么做才能在我的PHP代码中接收volley发送的json对象。

还有如何检查截击是否真的在发送JSON对象?

我的凌空代码发送简单的发帖请求:

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代码:( 我很确定这是错误的方式,我在PHP中不太好)

$jsonReceiveData = json_encode($_POST);

echo $jsonReceivedData;

?>

我也尝试了很多在PHP中接受JSON对象的方法 echo file_get_contents('php://input');

结果

null

编辑(感谢格鲁吉亚·贝纳托斯的正确方法)

正如您提到的,我创建了该类,其类名称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));

}

}

}

现在在我的活动中,我打电话给以下人员:

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);

?>

现在,它返回正确的值:

Droider

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值