Java 如何在drupal桌上截击

Java 如何在drupal桌上截击,java,android,drupal,drupal-7,android-volley,Java,Android,Drupal,Drupal 7,Android Volley,我正试图从我的Android应用程序中截取x-www-form-url编码到drupal表中。我试图在参数中发送一个“type”和“value”,结果得到一个500错误。基本StringRequest返回404 这是我的最新代码。我只找到一两个与截击有关的条目。任何帮助都将不胜感激。祝你今天愉快 private void postTestAnswerResult(String id, String answerResult) { StringRequest req = null;

我正试图从我的Android应用程序中截取x-www-form-url编码到drupal表中。我试图在参数中发送一个“type”和“value”,结果得到一个500错误。基本StringRequest返回404

这是我的最新代码。我只找到一两个与截击有关的条目。任何帮助都将不胜感激。祝你今天愉快

private void postTestAnswerResult(String id, String answerResult) {

    StringRequest req = null;
    requestQueue = Volley.newRequestQueue(this);

    final String baseURL = "http://blah.blah.com/api/answer/";
    String URL = baseURL + id;
    // Post params to be sent to the server
    HashMap<String, String> params = new HashMap<String, String>();
    params.put("Content-Type","application/x-www-form-urlencoded");

    params.put("type", answerResult);



    req = new StringRequest(Request.Method.PUT, URL,

    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            VolleyLog.v("Response:%n %s", response.toString());
        }
    },

    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            try {
                String responseBody = new String(
                        volleyError.networkResponse.data, "utf-8");
                JSONObject jsonObject = new JSONObject(responseBody);
            } catch (JSONException e) {
                // Handle a malformed json response
            } catch (UnsupportedEncodingException error) {

            }
        }
    }

    );

    requestQueue.add(req);

}
private void postTestAnswerResult(字符串id,字符串answerResult){
StringRequest-req=null;
requestQueue=Volley.newRequestQueue(this);
最终字符串baseURL=”http://blah.blah.com/api/answer/";
字符串URL=baseURL+id;
//将要发送到服务器的Post参数
HashMap params=新的HashMap();
参数put(“内容类型”、“应用程序/x-www-form-urlencoded”);
参数put(“类型”,应答结果);
req=新的StringRequest(Request.Method.PUT,URL,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
v(“响应:%n%s”,Response.toString());
}
},
新的Response.ErrorListener(){
@凌驾
公共错误响应(截击错误截击错误){
试一试{
String responseBody=新字符串(
截击错误.networkResponse.data,“utf-8”);
JSONObject JSONObject=新的JSONObject(ResponseBy);
}捕获(JSONException e){
//处理格式错误的json响应
}捕获(不支持DencodingException错误){
}
}
}
);
添加(req);
}

如果您仍然对此有问题,正如@Meier在上面的评论中指出的,您没有使用params变量,或者更确切地说,您没有正确使用它。数据不会被发送到服务器,服务器可能期望数据会导致500错误

您需要重写StringRequest调用的getParams方法才能发送数据。因此,以下几点将更接近于完成工作:

private void postTestAnswerResult(String id, String answerResult) {
  StringRequest req = null;
  requestQueue = Volley.newRequestQueue(this);

  final String baseURL = "http://blah.blah.com/api/answer/";
  String URL = baseURL + id;



  req = new StringRequest(Request.Method.PUT, URL,

    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            VolleyLog.v("Response:%n %s", response.toString());
        }
    },
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            try {
                String responseBody = new String(
                        volleyError.networkResponse.data, "utf-8");
                JSONObject jsonObject = new JSONObject(responseBody);
            } catch (JSONException e) {
                // Handle a malformed json response
            } catch (UnsupportedEncodingException error) {

            }
        }
    }
) {
  @Override
  protected Map<String, String> getParams()
  { 
    HashMap<String, String> params = new HashMap<String, String>();
    // params.put("Content-Type","application/x-www-form-urlencoded"); This shouldn't be here. This is a HTTP header. If you want to specify header you should also override getHeaders. 
    params.put("type", answerResult);  

    return params;
  }

};

 requestQueue.add(req);
private void postTestAnswerResult(字符串id,字符串answerResult){
StringRequest-req=null;
requestQueue=Volley.newRequestQueue(this);
最终字符串baseURL=”http://blah.blah.com/api/answer/";
字符串URL=baseURL+id;
req=新的StringRequest(Request.Method.PUT,URL,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
v(“响应:%n%s”,Response.toString());
}
},
新的Response.ErrorListener(){
@凌驾
公共错误响应(截击错误截击错误){
试一试{
String responseBody=新字符串(
截击错误.networkResponse.data,“utf-8”);
JSONObject JSONObject=新的JSONObject(ResponseBy);
}捕获(JSONException e){
//处理格式错误的json响应
}捕获(不支持DencodingException错误){
}
}
}
) {
@凌驾
受保护的映射getParams()
{ 
HashMap params=新的HashMap();
//params.put(“Content-Type”,“application/x-www-form-urlencoded”);不应在此处。这是一个HTTP头。如果要指定头,还应覆盖getHeaders。
参数put(“类型”,应答结果);
返回参数;
}
};
添加(req);

浏览器不会忽略500个错误。它们通常在浏览器窗口中显示为难看的消息。

500个错误表示服务器发现了错误。您可以在服务器日志文件中找到有关错误的详细信息。谢谢。我听说500个错误会被多次发回,而浏览器基本上会忽略它们。以上代码看起来正确吗?谢谢。500表示服务器错误。如果服务器告诉您有错误,请至少查看error.log。brwoser可能会忽略它,因为它无法执行任何操作。但您可以执行某些操作,请查看error.log!您在上述代码中没有使用params变量。