Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在截图中向Django Rest框架API发出POST请求?_Android_Python_Django_Rest_Android Volley - Fatal编程技术网

Android 如何在截图中向Django Rest框架API发出POST请求?

Android 如何在截图中向Django Rest框架API发出POST请求?,android,python,django,rest,android-volley,Android,Python,Django,Rest,Android Volley,下面是我通过Postman向基于Django Rest框架的API发出的一个简单http请求。 我以表单数据的形式发送4个简单参数name、phone、password1和password2,并期望服务器返回一个json对象,其中包含一个名为key的键,其值为JWT(json web令牌)。这是一个很好的邮递员,但每当我试图通过截击在我的应用程序中做同样的事情时,我会收到400个错误的请求。我试过做很多事情,但都是徒劳的 有人能给我解释一下如何在截击中以表单数据的形式发布一些数据吗 这是我的密

下面是我通过Postman向基于Django Rest框架的API发出的一个简单http请求。

我以表单数据的形式发送4个简单参数
name
phone
password1
password2
,并期望服务器返回一个json对象,其中包含一个名为
key
的键,其值为JWT(json web令牌)。这是一个很好的邮递员,但每当我试图通过截击在我的应用程序中做同样的事情时,我会收到400个错误的请求。我试过做很多事情,但都是徒劳的

有人能给我解释一下如何在截击中以表单数据的形式发布一些数据吗

这是我的密码

public void signUp(View View) throws Exception
   {
       queue = Volley.newRequestQueue(this);
       url = "http://<example>.com/auth/registration/";
       Map<String,String> params = new HashMap<String, String>();
       params.put("name","habc");
       params.put("phone","0324423");
       params.put("password1","pass");
       params.put("password2","pass");
       JsonObjectRequest add_user_request = new JsonObjectRequest(Request.Method.POST, url,new JSONObject(params),
               new Response.Listener<JSONObject>()
               {
                   @Override
                   public void onResponse(JSONObject response) {

                       try {
                           String key = response.getString("key");
                           tv.setText(key);
                       } catch (JSONException e) {
                           // Handle exception 
                       }
                   }
               },
               new Response.ErrorListener()
               {
                   @Override
                   public void onErrorResponse(VolleyError error) {
                       // error.getStackTrace() doesnt print enough information
                   }
               }
       )
       {
           @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");
               return params;
           }
       };
       Toast.makeText(this,"Adding requst to queue . . ",Toast.LENGTH_SHORT).show();
       queue.add(add_user_request);
       queue.start();
   }
public void注册(视图)引发异常
{
queue=Volley.newRequestQueue(this);
url=”http://.com/auth/registration/";
Map params=新的HashMap();
参数put(“名称”、“habc”);
参数put(“电话”,“0324423”);
参数put(“password1”、“pass”);
参数put(“密码2”、“密码”);
JsonObjectRequest add_user_request=新JsonObjectRequest(request.Method.POST、url、新JSONObject(params),
新的Response.Listener()
{
@凌驾
公共void onResponse(JSONObject响应){
试一试{
String key=response.getString(“key”);
tv.setText(键);
}捕获(JSONException e){
//处理异常
}
}
},
新的Response.ErrorListener()
{
@凌驾
公共无效onErrorResponse(截击错误){
//错误。getStackTrace()未打印足够的信息
}
}
)
{
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map params=新的HashMap();
参数put(“内容类型”、“应用程序/x-www-form-urlencoded”);
返回参数;
}
};
Toast.makeText(这是“将请求添加到队列…”,Toast.LENGTH_SHORT.show();
添加(添加用户请求);
queue.start();
}

您必须添加
getParams()
方法(在getHeaders()方法之后)将数据发送到服务器

{
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String,String> params = new HashMap<String, String>();
        params.put("name","habc");
        params.put("phone","0324423");
        params.put("password1","pass");
        params.put("password2","pass");
        return params;
    }
}
{
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“名称”、“habc”);
参数put(“电话”,“0324423”);
参数put(“password1”、“pass”);
参数put(“密码2”、“密码”);
返回参数;
}
}

您必须添加
getParams()
方法(在getHeaders()方法之后)将数据发送到服务器

{
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String,String> params = new HashMap<String, String>();
        params.put("name","habc");
        params.put("phone","0324423");
        params.put("password1","pass");
        params.put("password2","pass");
        return params;
    }
}
{
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“名称”、“habc”);
参数put(“电话”,“0324423”);
参数put(“password1”、“pass”);
参数put(“密码2”、“密码”);
返回参数;
}
}

我仍然收到400服务器错误。RESTAPI发回一个json对象,其中包含有关错误的详细信息,但我无法从我在
Response.ErrorListner
中得到的
VolleyError
对象中检索该json对象。请帮我获取该错误。删除
getHeaders()
并重试。我仍然收到相同的错误。我需要知道如何打印服务器发送的响应,即使在出现错误的情况下也是如此。在这种情况下,您必须发送一个StringRequest,以便可以接收纯字符串响应。我仍然收到400服务器错误。RESTAPI发回一个json对象,其中包含有关错误的详细信息,但我无法从我在
Response.ErrorListner
中得到的
VolleyError
对象中检索该json对象。请帮我获取该错误。删除
getHeaders()
并重试。我仍然收到相同的错误。我需要知道如何打印服务器发送的响应,即使在出现错误的情况下也是如此。在这种情况下,您必须发送一个StringRequest,以便可以接收一个普通字符串响应。