Android截击-发布请求-无法在线工作
我试图通过截击发出发帖请求。它在我的本地主机上运行得非常好,但当我将其移动到Web服务器时,响应为空 Java代码Android截击-发布请求-无法在线工作,android,http-post,android-volley,Android,Http Post,Android Volley,我试图通过截击发出发帖请求。它在我的本地主机上运行得非常好,但当我将其移动到Web服务器时,响应为空 Java代码 RequestQueue queue = Volley.newRequestQueue(this); StringRequest sr = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest sr = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
pd.dismiss();
Log.d("Response: ", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error: ", error + "");
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("name", name);
params.put("phone", phone);
params.put("email", email);
Log.d("getParams", params.toString());
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/x-www-form-urlencoded");
Log.d("getHeaders", params.toString());
return params;
}
};
queue.add(sr);
我以前也遇到过同样的问题,通过使用自定义请求队列解决了这个问题 首先创建自定义请求类CustomRequest.java
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<JSONObject> {
private Listener<JSONObject> listener;
private Map<String, String> params;
public CustomRequest(String url, Map<String, String> params,
Listener<JSONObject> reponseListener, ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.listener = reponseListener;
this.params = params;
}
public CustomRequest(int method, String url, Map<String, String> params,
Listener<JSONObject> reponseListener, ErrorListener errorListener) {
super(method, url, errorListener);
this.listener = reponseListener;
this.params = params;
}
protected Map<String, String> getParams()
throws com.android.volley.AuthFailureError {
return params;
};
@Override
protected Response<JSONObject> 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));
}
}
@Override
protected void deliverResponse(JSONObject response) {
// TODO Auto-generated method stub
listener.onResponse(response);
}
}
import java.io.UnsupportedEncodingException;
导入java.util.Map;
导入org.json.JSONException;
导入org.json.JSONObject;
导入com.android.volley.NetworkResponse;
导入com.android.volley.ParseError;
导入com.android.volley.Request;
导入com.android.volley.Response;
导入com.android.volley.Response.ErrorListener;
导入com.android.volley.Response.Listener;
导入com.android.volley.toolbox.HttpHeaderParser;
公共类CustomRequest扩展了请求{
私人倾听者;
私有映射参数;
公共CustomRequest(字符串url、映射参数、,
侦听器reposeListener,ErrorListener ErrorListener){
super(Method.GET、url、errorListener);
this.listener=reponlistener;
this.params=params;
}
公共CustomRequest(int方法、字符串url、映射参数、,
侦听器reposeListener,ErrorListener ErrorListener){
super(方法、url、errorListener);
this.listener=reponlistener;
this.params=params;
}
受保护的映射getParams()
抛出com.android.volley.AuthFailureError{
返回参数;
};
@凌驾
受保护的响应parseNetworkResponse(NetworkResponse响应){
试一试{
String jsonString=新字符串(response.data,
HttpHeaderParser.parseCharset(response.headers));
返回Response.success(新的JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(响应));
}捕获(不支持的编码异常e){
返回Response.error(新的ParseError(e));
}捕获(JSONException je){
返回Response.error(newparseerror(je));
}
}
@凌驾
受保护的void deliverResponse(JSONObject响应){
//TODO自动生成的方法存根
onResponse(response);
}
}
然后我执行了如下请求
Map<String, String> params = new HashMap<String, String>();
params.put("name", name);
params.put("email", phone);
params.put("phone", email);
CustomRequest jsonObjReq = new CustomRequest(
Method.POST,
Const.URL_SEND_FEEDBACK,params,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
}) {
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
//params.put("Content-Type", "application/x-www-form-urlencoded"); not used this
Log.d("getHeaders", params.toString());
return params;
}
};
AppController.getInstance().addToRequestQueue(jsonObjReq);
Map params=newhashmap();
参数put(“名称”,名称);
参数put(“电子邮件”,电话);
参数put(“电话”,电子邮件);
CustomRequest jsonObjReq=新的CustomRequest(
方法.POST,
常量URL\u发送\u反馈,参数,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject JSONObject){
}
},
新的Response.ErrorListener(){
@凌驾
公共错误响应(截击错误截击错误){
}
}) {
公共映射getHeaders()引发AuthFailureError{
Map params=新的HashMap();
//params.put(“内容类型”,“应用程序/x-www-form-urlencoded”);未使用此
Log.d(“getHeaders”,params.toString());
返回参数;
}
};
AppController.getInstance().addToRequestQueue(JSONOBJEQ);
尝试添加charset=utf-8
。经过多次搜索,这对我来说是有效的
学分:
RequestQueue queue=Volley.newRequestQueue(this);
StringRequest sr=new StringRequest(Request.Method.POST,url,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
pd.解散();
Log.d(“Response:,Response.toString());
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.d(“错误:,错误+”);
}
}) {
@凌驾
受保护的映射getParams(){
Map params=新的HashMap();
参数put(“名称”,名称);
参数put(“电话”,电话);
参数put(“电子邮件”,电子邮件);
Log.d(“getParams”,params.toString());
返回参数;
}
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map params=新的HashMap();
参数put(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=utf-8”);
Log.d(“getHeaders”,params.toString());
返回参数;
}
};
添加(sr);
你所说的空响应是什么意思?我没有得到我在php部分中发布的值$name、$phone、$email为空此部分$name、$phone、$email
或整个字符串“name:”..$name。“phone:”..$phone。“email:”..$email
?只有变量为空我得到:D/响应:﹕ 姓名:电话:电子邮件:
你能试着打印($\u POST)吗;
Map<String, String> params = new HashMap<String, String>();
params.put("name", name);
params.put("email", phone);
params.put("phone", email);
CustomRequest jsonObjReq = new CustomRequest(
Method.POST,
Const.URL_SEND_FEEDBACK,params,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
}) {
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
//params.put("Content-Type", "application/x-www-form-urlencoded"); not used this
Log.d("getHeaders", params.toString());
return params;
}
};
AppController.getInstance().addToRequestQueue(jsonObjReq);
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest sr = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
pd.dismiss();
Log.d("Response: ", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error: ", error + "");
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("name", name);
params.put("phone", phone);
params.put("email", email);
Log.d("getParams", params.toString());
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
Log.d("getHeaders", params.toString());
return params;
}
};
queue.add(sr);