Android截击-发布请求-无法在线工作

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

我试图通过截击发出发帖请求。它在我的本地主机上运行得非常好,但当我将其移动到Web服务器时,响应为空

Java代码

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