簡體   English   中英

Android Volley請求引發Null指針異常

[英]Android Volley request throwing Null Pointer Exception

我一直在使用Android Volley庫在服務器中執行對PHP腳本的請求。 現在,當我這樣做時,我遇到了一個異常錯誤。

我的Android腳本調用代碼如下:

 private void writeDatatoDB(){

    StringRequest sr = new StringRequest(Request.Method.POST,URL , new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_SHORT).show();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_SHORT).show();
        }
    }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            HashMap<String,String> maps = new HashMap<>();
            maps.put(SinchHolders.phpUserName,uName);
            maps.put(SinchHolders.phpUserNickName,uNick);
            maps.put(SinchHolders.phpUserPassword,uPass);
            maps.put(SinchHolders.phpUserFirebaseToken,uFCM);
            maps.put(SinchHolders.phpUserProfession,uUserProf);
            maps.put(SinchHolders.phpUserexpertise,uUserExp);
            maps.put(SinchHolders.phpUserGender,ugender);
            maps.put(SinchHolders.phpUserZip,uZip);
            maps.put(SinchHolders.phpUserBirthYear,uBirth);
            return maps;

        }
    };
    RequestQueue rq = Volley.newRequestQueue(dummy_signup_2.this);
    rq.add(sr);
}

Volley庫的PHP腳本如下:

<?php
    if( $_SERVER['REQUEST_METHOD'] == 'POST' ){
        $id = $_POST['UserName'];
        $nick =$_POST['NickName'];
        $pass =$_POST['UserPassword'];
        $FirebaseToken = $_POST['FireBaseId'];
        $BDate = $_POST['bithdate'];
        $ZCode = $_POST['zipcode'];
        $Gender = $_POST['sex'];
        $UserProfession = $_POST['userprofession'];
        $userexpert = $_POST['userexpertise'];
        $sql="insert into `User`(`UserNickName`, `UserName`, `password`, `createDate`, `FirebaseToken`, `BirthYear`, `ZipCode`, `Gender`, `UserProfession`, `UserExpertise`) values ('$nick','$id','$pass',Default,'$FirebaseToken','$BDate','$ZCode','$Gender','$UserProfession','$UserExpertise')";
        require_once('db_connect_me.php');
        if(mysqli_query($con,$sql)){
            echo"Success";
        }
        else{
            echo "Failure";
        }
        mysqli_close($con);
    }else{
        echo "Error";
    }
    ?>

Volley擲給我的錯誤是com.android.volley.VolleyError: Java.Lang.NullPointerException 該錯誤是由服務器端的一些錯誤引起的,因為該錯誤會在ErrorListener中定義的吐司中顯示ErrorListener 我不明白可能是什么問題。 我已經創建了一個簡單的helloworld php文件,並使用相同的代碼進行了調用,因此能夠獲得輸出。 這可能是什么問題?

堆棧跟蹤 :

01-27 19:11:41.715 12548-16431/com.example.****.****E/Volley: [2720] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException
                                                                         java.lang.NullPointerException
                                                                             at libcore.net.UriCodec.encode(UriCodec.java:132)
                                                                             at java.net.URLEncoder.encode(URLEncoder.java:57)
                                                                             at com.android.volley.Request.encodeParameters(Request.java:450)
                                                                             at com.android.volley.Request.getBody(Request.java:436)
                                                                             at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:260)
                                                                             at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:234)
                                                                             at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:107)
                                                                             at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96)
                                                                             at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)

PS:請仔細閱讀問題,您將了解這與在該網站上發現的NullPointerException問題沒有任何重復。

當任何params值為null時,您將獲得此exception 檢查你的價值參數params

 @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        //put your map keys
        return checkParams(params);
    }

 private Map<String, String> checkParams(Map<String, String> map){               
        Iterator<Entry<String, String>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next();
            if(pairs.getValue()==null){
                map.put(pairs.getKey(), "");
            }
        }
        return map;             
    }

NullPointException是由您要放入數據庫的一個值引起的,而沒有從用戶那里獲取值。 缺少createDate

DB的參數為10:

`UserNickName`, `UserName`, `password`, `createDate`, `FirebaseToken`, `BirthYear`, `ZipCode`, `Gender`, `UserProfession`, `UserExpertise`

您錯過了以下輸入值:

`createDate`

僅來自用戶9:

maps.put(SinchHolders.phpUserName,uName);
maps.put(SinchHolders.phpUserNickName,uNick);
maps.put(SinchHolders.phpUserPassword,uPass);
maps.put(SinchHolders.phpUserFirebaseToken,uFCM);
maps.put(SinchHolders.phpUserProfession,uUserProf);
maps.put(SinchHolders.phpUserexpertise,uUserExp);
maps.put(SinchHolders.phpUserGender,ugender);
maps.put(SinchHolders.phpUserZip,uZip);
maps.put(SinchHolders.phpUserBirthYear,uBirth);

暫無
暫無

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

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