Android截击意外响应代码400,正文为x-www-form-urlencoded

Android截击意外响应代码400,正文为x-www-form-urlencoded,android,android-volley,Android,Android Volley,我想用body x-www-form-urlencoded参数向RESTAPI发出POST请求。我尝试了以下代码,但得到错误代码400。 我已经试着调试了几个小时,但得到了相同的响应。任何帮助都将不胜感激 public class LoginFragment extends Fragment { private static final String TAG = "LoginFragment"; EditText mUsername, mPassword; Button mLogin; St

我想用body x-www-form-urlencoded参数向RESTAPI发出POST请求。我尝试了以下代码,但得到错误代码400。 我已经试着调试了几个小时,但得到了相同的响应。任何帮助都将不胜感激

public class LoginFragment extends Fragment {

private static final String TAG = "LoginFragment";

EditText mUsername, mPassword;
Button mLogin;
String url = "abc";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_login, container, false);

    mUsername = (EditText) rootView.findViewById(R.id.login_name_edit_text);
    mPassword = (EditText) rootView.findViewById(R.id.login_password_edit_text);
    mLogin = (Button) rootView.findViewById(R.id.login_button);

    mLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String username = mUsername.toString();
            String password = mPassword.toString();

            if (username.trim().length() > 0 && password.trim().length() > 0) {
                checkLogin(username, password);
            } else {
                Toast.makeText(getContext(), "Please enter the credentials!", Toast.LENGTH_SHORT).show();
            }
        }
    });

    return rootView;
}

private void checkLogin(final String username, final String password) {
    // Tag used to cancel the request

    StringRequest strReq = new StringRequest(Request.Method.POST,
            url, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            Log.d(TAG, "Login Response: " + response.toString());

            try {
                JSONObject jObj = new JSONObject(response);
                boolean error = jObj.getBoolean("error");

                // Check for error node in json
                if (!error) {
                    // user successfully logged in

                    // Launch main activity
                    Intent intent = new Intent(getActivity(),
                            MainActivity.class);
                    startActivity(intent);
                    getActivity().finish();
                } else {
                    // Error in login. Get the error message
                    String errorMsg = jObj.getString("message");
                    Toast.makeText(getContext(),
                            errorMsg, Toast.LENGTH_LONG).show();
                }
            } catch (JSONException e) {
                // JSON error
                e.printStackTrace();
            }

        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Login Error: " + error.getMessage());
            Toast.makeText(getContext(),
                    error.getMessage(), Toast.LENGTH_LONG).show();
        }
    }) {

        @Override
        public String getBodyContentType() {
            return "application/x-www-form-urlencoded; charset=UTF-8";
        }

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            // Posting parameters to login url
            Map<String, String> params = new HashMap<String, String>();
            params.put("username", username);
            params.put("password", password);

            return params;
        }

    };

    // Adding request to request queue
    MySingleton.getInstance(getContext()).addToRequestQueue(strReq);
}
公共类LoginFragment扩展了片段{
私有静态最终字符串TAG=“LoginFragment”;
编辑文本博物馆名称,mPassword;
按钮登录;
字符串url=“abc”;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
ViewGroup rootView=(ViewGroup)充气器。充气(R.layout.fragment\u登录,容器,false);
mUsername=(EditText)rootView.findViewById(R.id.login\u name\u edit\u text);
mPassword=(EditText)rootView.findViewById(R.id.login\u password\u edit\u text);
mLogin=(按钮)rootView.findviewbyd(R.id.login\u按钮);
mLogin.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
字符串username=mUsername.toString();
字符串密码=mPassword.toString();
if(username.trim().length()>0&&password.trim().length()>0){
checkLogin(用户名、密码);
}否则{
Toast.makeText(getContext(),“请输入凭据!”,Toast.LENGTH\u SHORT.show();
}
}
});
返回rootView;
}
私有void checkLogin(最终字符串用户名、最终字符串密码){
//用于取消请求的标记
StringRequest strReq=新的StringRequest(Request.Method.POST,
url,新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
Log.d(标记“登录响应:+Response.toString());
试一试{
JSONObject jObj=新的JSONObject(响应);
布尔错误=jObj.getBoolean(“错误”);
//检查json中的错误节点
如果(!错误){
//用户已成功登录
//开展主要活动
意向意向=新意向(getActivity(),
主要活动(课堂);
星触觉(意向);
getActivity().finish();
}否则{
//登录时出错。获取错误消息
字符串errorMsg=jObj.getString(“消息”);
Toast.makeText(getContext(),
errorMsg,Toast.LENGTH_LONG).show();
}
}捕获(JSONException e){
//JSON错误
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(标记“登录错误:+Error.getMessage());
Toast.makeText(getContext(),
error.getMessage(),Toast.LENGTH_LONG).show();
}
}) {
@凌驾
公共字符串getBodyContentType(){
返回“application/x-www-form-urlencoded;charset=UTF-8”;
}
@凌驾
受保护的映射getParams()引发AuthFailureError{
//将参数发布到登录url
Map params=新的HashMap();
参数put(“用户名”,用户名);
参数put(“密码”,密码);
返回参数;
}
};
//将请求添加到请求队列
getInstance(getContext()).addToRequestQueue(streq);
}
}这是一个愚蠢的错误
我编写了mUsername.toString()而不是mUsername.getText()

请尝试我的示例代码。看起来你也有类似的问题,注意评论直到出现同样的错误