簡體   English   中英

Android Volley庫StringRequest錯誤

[英]Android Volley Library StringRequest error

我想使用Android中的凌空庫向我的REST API發送請求。

             try {
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("first_name", firstName);
        jsonBody.put("last_name", lastName);
        jsonBody.put("email", email);
        jsonBody.put("password", password);

        final String requestBody = jsonBody.toString();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d(TAG, "Register Response: " + response);
                hideDialog();

                try {
                    JSONObject jObj = new JSONObject(response);
                    String message = jObj.getString("msg");

                    if (message.equals("User created successfully")){

                        JSONObject user = jObj.getJSONObject("user");
                        String first_name = user.getString("first_name");
                        String last_name = user.getString("last_name");
                        String email = user.getString("email");
                        int id = user.getInt("id");

                        db.addUser(first_name, last_name, email, id);
                        Toast.makeText(getApplicationContext(), "User successfully registered. Try login now!", Toast.LENGTH_LONG).show();

                        login(email, password);
                        /*Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
                        startActivity(intent);
                        finish(); */
                    } else {
                        Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("VOLLEY", error.toString());
                hideDialog();
                //TODO give the error to the user and close the dialog box
            }
        }) {
            @Override
            public String getBodyContentType() {
                return "application/json";
            }

            @Override
            public byte[] getBody() throws AuthFailureError {
                return requestBody.getBytes();

            }
        };

        requestQueue.add(stringRequest);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

我正確創建了jsonBody,並希望將請求發送到AppConfig.URL_login,它是localhost:8000 / api / v1 / user / signin

錯誤信息:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.android.besecure, PID: 3915
              java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
                  at com.android.volley.Request.<init>(Request.java:136)
                  at com.android.volley.toolbox.StringRequest.<init>(StringRequest.java:43)
                  at com.example.android.besecure.LoginActivity$5.<init>(LoginActivity.java:0)
                  at com.example.android.besecure.LoginActivity$5.<init>(LoginActivity.java:0)
                  at java.lang.reflect.Constructor.newInstance0(Native Method)
                  at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
                  at com.android.tools.fd.runtime.AndroidInstantRuntime.newForClass(AndroidInstantRuntime.java:191)
                  at com.example.android.besecure.LoginActivity$override.checkLogin(LoginActivity.java:107)
                  at com.example.android.besecure.LoginActivity$override.static$access$200(LoginActivity.java:27)
                  at com.example.android.besecure.LoginActivity$override.access$dispatch(LoginActivity.java)
                  at com.example.android.besecure.LoginActivity.access$200(LoginActivity.java:0)
                  at com.example.android.besecure.LoginActivity$1$override.onClick(LoginActivity.java:70)
                  at com.example.android.besecure.LoginActivity$1$override.access$dispatch(LoginActivity.java)
                  at com.example.android.besecure.LoginActivity$1.onClick(LoginActivity.java:0)
                  at android.view.View.performClick(View.java:5610)
                  at android.view.View$PerformClick.run(View.java:22265)
                  at android.os.Handler.handleCallback(Handler.java:751)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6077)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

錯誤出現在此行:

StringRequest stringRequest = new StringRequest(Request.Method.P ... )

我檢查了StringRequst構造函數的所有參數,但它們都不為null。 可能是什么問題呢? 謝謝!

您在執行操作時沒有檢查響應是否為null或在onResponse()方法中,您需要將其檢查為null或不執行操作,

if(response!=null){
// do what you want do
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM