簡體   English   中英

Android Volley - 在String上調用.length()時拋出空指針異常,但我不在任何地方使用.length()

[英]Android Volley - Throwing a Null Pointer Exception when calling .length() on a String, but I don't use .length() anywhere

所以我試圖將一些數據上傳到MySQL數據庫。 我從一個類(LoginActivity)中提取變量並將其放入另一個類(PartySetup)中,以便將這個變量和一些新變量傳遞到MySQL數據庫中。 在嘗試提取這個新變量之前,一切正常 - 我做的唯一更改是在LoginActivity中創建一個公共變量,將“user”添加到CreatePartyRequest,並修復我的PHP。

有沒有人有任何想法為什么會這樣? 我收到錯誤消息Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference - 我不知道這里什么是null。

PartySetup.java:

public class PartySetup extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

private GoogleApiClient mGoogleApiClient;
private Location location;
private TextView tempLatitude;
private TextView tempLongitude;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_party_setup);

    final EditText tempPartyName = (EditText) findViewById(R.id.party_name);
    final EditText tempHostName = (EditText) findViewById(R.id.host_name);
    final Button startParty = (Button) findViewById(R.id.create_party);
    final CheckBox locationButton = (CheckBox) findViewById(R.id.set_location);
    final String email = LoginActivity.publicEmail;
    tempLatitude = (TextView) findViewById(R.id.latitude_text);
    tempLongitude = (TextView) findViewById(R.id.longitude_text);

    if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }

    mGoogleApiClient.connect();

        startParty.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                if (locationButton.isChecked() && tempPartyName != null){
                    final String partyName = tempPartyName.getText().toString();
                    final String hostName;
                    if (tempHostName == null){
                        hostName = "";
                    }
                    else hostName = tempHostName.getText().toString();
                    final String latitude = tempLatitude.getText().toString();
                    final String longitude = tempLongitude.getText().toString();

                    Response.Listener<String> responseListener = new Response.Listener<String>(){
                        @Override
                        public void onResponse(String response){
                            try{
                                Log.i("TAG", response);
                                JSONObject jsonResponse = new JSONObject(response);
                                boolean success = jsonResponse.getBoolean("success");
                                if(success){
                                    Intent intent = new Intent(PartySetup.this, HomePage.class);
                                    startActivity(intent);
                                }
                                else{
                                    AlertDialog.Builder builder = new AlertDialog.Builder(PartySetup.this);
                                    builder.setMessage("Invalid Party Nickname")
                                            .setNegativeButton("Try Again", null)
                                            .create()
                                            .show();
                                }
                            } catch (JSONException e){
                                e.printStackTrace();
                            }
                        }
                    };

                    CreatePartyRequest createPartyRequest = new CreatePartyRequest(partyName, hostName, latitude, longitude, email, responseListener);
                    RequestQueue queue = Volley.newRequestQueue(PartySetup.this);
                    queue.add(createPartyRequest);
                }
                else {
                    AlertDialog.Builder builder = new AlertDialog.Builder(PartySetup.this);
                    builder.setMessage("Please check the location box")
                            .setNegativeButton("Try Again", null)
                            .create()
                            .show();
                }
            }
        });
    }

protected void onStart() {
    mGoogleApiClient.connect();
    super.onStart();
}

protected void onStop() {
    mGoogleApiClient.disconnect();
    super.onStop();
}

@Override
public void onConnected(@Nullable Bundle bundle) {
    try{
        location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    }
    catch (SecurityException e){
        e.printStackTrace();
    }
    if (location != null){
        tempLatitude.setText(String.valueOf(location.getLatitude()));
        tempLongitude.setText(String.valueOf(location.getLongitude()));
    }
}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}
}

CreatePartyRequest.java:

public class CreatePartyRequest extends StringRequest {
private static final String CREATE_PARTY_REQUEST_URL = "http://10.0.2.2:8080/android_login_api/create_party_request.php";
private Map<String, String> params;

public CreatePartyRequest(String partyName, String hostName, String latitude, String longitude, String email, Response.Listener<String> listener){
    super(Method.POST, CREATE_PARTY_REQUEST_URL, listener, null);
    params = new HashMap<>();
    params.put("partyName", partyName);
    params.put("hostName", hostName);
    params.put("latitude", latitude);
    params.put("longitude", longitude);
    params.put("user", email);
}

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

LoginActivity.java:

public class LoginActivity extends AppCompatActivity{

public static String publicEmail;

@Override
protected void onCreate(Bundle savedInstancedState){
    super.onCreate(savedInstancedState);
    setContentView(R.layout.activity_login);

    final EditText tempEmail = (EditText) findViewById(R.id.email);
    final EditText tempPassword = (EditText) findViewById(R.id.password);
    final Button loginButton = (Button) findViewById(R.id.btnLogin);
    final Button toRegisterScreen = (Button) findViewById(R.id.btnLinkToRegisterScreen);

    if (SaveSharedPreference.getUserName(LoginActivity.this).length() != 0){
        // If the user's already been logged in, skip the login screen
        Intent intent = new Intent(LoginActivity.this, OneTimeWelcome.class);
        startActivity(intent);
        finish();
    }

    toRegisterScreen.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
            LoginActivity.this.startActivity(registerIntent);
        }
    });

    loginButton.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v){
            final String email = tempEmail.getText().toString();
            publicEmail = email;
            final String password = tempPassword.getText().toString();

            //Response received from the server
            Response.Listener<String> responseListener = new Response.Listener<String>(){
                @Override
                public void onResponse(String response){
                    try{
                        Log.i("TAG", response);
                        JSONObject jsonResponse = new JSONObject(response);
                        boolean success = jsonResponse.getBoolean("success");

                        if(success){
                            String name = jsonResponse.getString("name");

                            Intent intent = new Intent(LoginActivity.this, OneTimeWelcome.class);
                            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            intent.putExtra("name", name);
                            intent.putExtra("email", email);
                            LoginActivity.this.startActivity(intent);
                            finish();
                        }
                        else{
                            AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
                            builder.setMessage("Login Failed")
                                    .setNegativeButton("Retry", null)
                                    .create()
                                    .show();
                        }
                    }
                    catch(JSONException e){
                        e.printStackTrace();
                    }
                    SaveSharedPreference.setUserName(LoginActivity.this, email);
                }
            };

            LoginRequest loginRequest = new LoginRequest(email, password, responseListener);
            RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
            queue.add(loginRequest);
        }
    });
}
}

create_party_request.php:

<?php

$con = mysqli_connect("127.0.0.1" , "[username]" , "[password]" , "android_api");

$partyName = $_POST["partyName"];
$hostName = $_POST["hostName"];
$latitude = $_POST["latitude"];
$longitude = $_POST["longitude"];
$email = $_POST["email"];

global $con, $partyName, $hostName, $latitude, $longitude;
$statement = mysqli_prepare($con, "INSERT INTO parties (party_name, host_name, latitude, longitude, email) VALUES (?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($statement, "sssss", $partyName, $hostName, $latitude, $longitude, $email);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);

$emailStatement = mysqli_prepare($con, "SELECT * FROM" )

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

echo json_encode($response); 
?>

錯誤的圖像

該錯誤基本上表示'SaveSharedPreference.getUserName(LoginActivity.this)'為空。 如果Prefs中的用戶名中存儲了某些內容,請先嘗試檢查。 如果我建議,使用'TextUtils.isEmpty(String)'檢查是否為空值或空值。

暫無
暫無

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

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