2017-01-27 15 views
1

Я использую библиотеку Android Volley для выполнения запросов на PHP-скрипты на моем сервере довольно долгое время. Теперь я получаю необычную ошибку, когда я это делаю.Android Volley запрос throwing Null Pointer Exception

Мой 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 
    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. Я не понимаю, в чем проблема. Я создал простой PHP-файл helloworld и назвал его с использованием того же кода, и я смог получить результат. Что может быть неправильно с этим?

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

вы php-код моего привести к SQL-инъекции, пожалуйста, используйте mysqli_real_escape_string –

ответ

2

вы получите это exception, когда любое значение params i s null. Проверьте свои значения в 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 вызвано одним значением, которое вы связываете, чтобы поместить в БД и не получить значение от пользователя. Отсутствующие - createDate:

Params в БД являются 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); 
+1

Значение createDate имеет значение по умолчанию, которое будет «SERVER_TIMESTAMP' – Tyson

+0

« По умолчанию »равно null man – W4R10CK

+1

Но есть опция, по которой вы можете сделать значение по умолчанию как Timestamp, и оно отлично работает, когда я выполняю запрос из поле запроса SQL в PHPMyAdmin. – Tyson

 Смежные вопросы

  • Нет связанных вопросов^_^