簡體   English   中英

當我嘗試重新登錄時,Android應用程序崩潰

[英]Android app crashes when i try to reLogin

我有一個通過改版連接到API的android應用,我已經成功登錄,如果我按“后退”按鈕再次返回到登錄活動,如果我嘗試重新登錄,該應用將崩潰並給我一個NullPointerException 。

這是連接代碼

    private void loginUser(String email, String password) {

    UnifyAuthenticationApiInterface service = this.client.create(UnifyAuthenticationApiInterface.class);
    Call<UnifyAuthenticationApiResponse> call = service.staffLogin(email, password);

    call.enqueue(new Callback<UnifyAuthenticationApiResponse>() {
        @Override
        public void onResponse(Call<UnifyAuthenticationApiResponse> call,
                               Response<UnifyAuthenticationApiResponse> response) {

            UnifyAuthenticationApiResponse result = response.body();
            School school = new School();
            com.peterstev.unify.login.Data data = result.getData();
            mySchoolsList = new ArrayList<School>();
            mySchoolsList = data.getSchools();
            staff = data.getStaff();

            gotoHomeActivity();

        }

        @Override
        public void onFailure(Call<UnifyAuthenticationApiResponse> call, Throwable t) {
            progressDialog.dismiss();
            Toast.makeText(MainActivity.this, "Login Failed @ onFailure", Toast.LENGTH_SHORT).show();
        }
    });
}

而goToHomeActivity()是

 private void gotoHomeActivity() {
    progressDialog.dismiss();
    if (mySchoolsList.size() > 1) {
        schoolsListView = new ListView(MainActivity.this);
        schoolsArrayAdapter = new SchoolListAdapter(MainActivity.this, android.R.layout.simple_list_item_1, mySchoolsList);
        schoolsListView.setAdapter(schoolsArrayAdapter);

        dialog = new Dialog(MainActivity.this);
        dialog.setContentView(schoolsListView);
        dialog.setTitle("Welcome " + staff.getFullName());
        dialog.show();

    } else {
        Intent intent = new Intent(MainActivity.this, NavMainActivity.class);
        startActivity(intent);
    }
}

NullPointerException被拋出

com.peterstev.unify.login.Data data = result.getData();

起初,它獲取的數據n已成功登錄,但是當我使用后退按鈕n嘗試再次登錄時,它崩潰了。

調試器是您的答案-檢查返回時是否沒有丟失任何數據-也許您將登錄參數存儲在活動類中的某個位置,但您沒有正確保存實例狀態,並且第二次請求在沒有必要數據的情況下被觸發。 在第一次和第二次調用您的請求之前,請檢查變量的狀態。

在這種情況下,最好選擇放置斷點並逐步觸發您的工作。 沒有調試技巧,您就不能成為優秀的開發人員。

我認為由於某些原因,當我使用后退按鈕導航到父活動時,數據對象沒有收到結果。 所以我用,如果條件,使其獲得所需的數據。

 private void loginUser(String email, String password) {

    UnifyAuthenticationApiInterface service = this.client.create(UnifyAuthenticationApiInterface.class);
    Call<UnifyAuthenticationApiResponse> call = service.staffLogin(email, password);

    call.enqueue(new Callback<UnifyAuthenticationApiResponse>() {
        @Override
        public void onResponse(Call<UnifyAuthenticationApiResponse> call,
                               Response<UnifyAuthenticationApiResponse> response) {

            if(response.isSuccessful()) {

                UnifyAuthenticationApiResponse result = response.body();
                School school = new School();
                data = result.getData();
                if(data == null) {
                    try{
                        this.onResponse(call, response);
                    }catch(NullPointerException NPE){
                        Log.d("NPE", NPE.getMessage());
                    }
                }
                mySchoolsList = new ArrayList<School>();
                mySchoolsList = data.getSchools();
                staff = data.getStaff();

                gotoHomeActivity();
            }
        }

        @Override
        public void onFailure(Call<UnifyAuthenticationApiResponse> call, Throwable t) {
            progressDialog.dismiss();
            Toast.makeText(MainActivity.this, "Login Failed @ onFailure", Toast.LENGTH_SHORT).show();
        }
    });
}

暫無
暫無

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

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