2017-01-27 9 views
1

私はかなりの時間の間、私のサーバのPHPスクリプトへのリクエストを実行するために、Android Volleyライブラリを使用しています。今私はそれをするときに異常なエラーが発生しています。次のようにスクリプトを呼び出すためにAndroid VolleyリクエストのNull Pointer例外を投げる

私の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); 
} 

PHPスクリプトは次のようVolleyライブラリがあること:

<?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で定義されているトーストで表示されるため、サーバー側からの何らかのエラーによってエラーが発生します。私はその問題が何であるかを理解していない。私は単純なhelloworld PHPファイルを作成し、同じコードを使ってそれを呼び出すと、出力を得ることができました。これで何が間違っているのでしょうか?

のStackTrace:

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質問重複していないことを理解するであろうしてください。

+0

どのラインが* NullPointerException *を投げていますか? – adalPaRi

+0

@adalPaRiスクリプトからの応答が例外をスローしています。 'ErrorListener'で与えられたトーストがその例外をスローしています。 – Tyson

+0

SQLインジェクションへの私のリードをPHPでコードします。mysqli_real_escape_stringを使用してください。 –

答えて

2

を、あなたが取得しますこのexceptionのいずれかである場合、値i sヌル。値パラメータを確認してください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;    
    } 
1

NullPointExceptionは、DBに入れることを念頭に置き、ユーザーから価値を得られない1つの値によって引き起こされます。行方不明 - createDateを:

DBへのparams 10以下のとおりです。ユーザーから

`createDate` 

のみ9:あなたはのための入力値を逃した

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

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); 
+1

createDateには 'SERVER_TIMESTAMP'のデフォルト値が与えられます – Tyson

+0

' Default'はヌルマン – W4R10CK

+1

ですが、デフォルトをタイムスタンプにすることができるオプションがあります。 PHPMyAdminのSQLクエリボックス。 – Tyson

関連する問題