2017-10-01 6 views
2

現在、SharedPreferencesに格納されている情報をVolleyを使用してリモートのmysqlデータベースに送信しています。 addDataToDB()メソッドを呼び出すと、NullPointer例外が発生します。値が存在し、存在するかどうかをテストしました(ログ出力を使用)。なぜ私がnullポインタ例外を取得しているのか理解できません。Volleyによる永続データの送信時のヌルポインタの例外

下記の関連コードを追加しました。

リモートサーバに情報を送信するために使用方法:

private void addDataToDB(){ 

    username = preferences.getString("username", null); 
    firstname = preferences.getString("firstname", null); 
    lastname = preferences.getString("lastname", null); 
    Log.d("TAG", "addDataToDB: " + username + firstname + lastname); //Getting correct name print outs 

    Response.Listener<String> responseListener = new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      //not reaching here 
      try { 
       JSONObject jsonResponse = new JSONObject(response); 
       boolean success = jsonResponse.getBoolean("success"); 
       if (success) { 
        Toast.makeText(MainActivity.this, "All data added", Toast.LENGTH_SHORT).show(); 
       } else { 
        Toast.makeText(MainActivity.this, "Data not added!", Toast.LENGTH_SHORT).show(); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 

    RegisterRequestAll registerRequestAll = new RegisterRequestAll(
      username, firstname, lastname, responseListener); 
    RequestQueue queue = Volley.newRequestQueue(MainActivity.this); 
    queue.add(registerRequestAll); 
} 

RegisterRequestAllクラス:

class RegisterRequestAll extends StringRequest{ 
    private static final String REGISTER_REQUEST_URL = "register.php"; 
    private Map<String, String> params; 

    RegisterRequestAll(
      String username, String firstname, String lastname, Response.Listener<String> listener) { 
     super(Method.POST, REGISTER_REQUEST_URL, listener, null); 
     params = new HashMap<>(); 
     params.put("username", username); 
     params.put("firstname", firstname); 
     params.put("lastname", lastname); 
    } 

    @Override 
    public Map<String, String> getParams() { 
     return params; 
    } 
} 

register.php:

<?php 

    require("connect.php"); // working file which connects to database 

    $username = $_POST["username"]; 
    $firstname = $_POST["firstname"]; 
    $lastname = $_POST["lastname"]; 

    $response = array(); 
    $response["success"] = false; 

    function registerUser() { 
     global $connection, $username, $firstname, $lastname, $response; 

     $sql = "UPDATE user SET firstname=?, lastname=? WHERE username=?"; 
     if($stmt = mysqli_prepare($connection, $sql)){ 
      mysqli_stmt_bind_param($stmt, "sss", $firstname, $lastname, $username); 
      mysqli_stmt_execute($stmt); 
     } 
     mysqli_stmt_close($stmt); 
     mysqli_close($connection); 
     $response["success"] = true; 
    } 

    registerUser(); 
    echo json_encode($response); 

例外:

[263] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference 
                      at java.net.URLEncoder.encode(URLEncoder.java:204) 
                      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) 

答えて

0

それは通常、ユーザー名のヌル文字列

params.put("username", username); 
params.put("firstname", firstname); 
params.put("lastname", lastname); 

1つ(またはそれ以上)を投稿したときに起こると... nullです。

+0

上記のように、プリントアウトでテストし、渡している値が存在します。 – cubeb

+0

あなたはあなただけのURLまたはパラメータになります – Hooman

関連する問題