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)
上記のように、プリントアウトでテストし、渡している値が存在します。 – cubeb
あなたはあなただけのURLまたはパラメータになります – Hooman