【问题标题】:How can i solve java.lang.NullPointerException problem? [duplicate]如何解决 java.lang.NullPointerException 问题? [复制]
【发布时间】:2021-09-24 18:49:40
【问题描述】:

我的 MainActivity 中有两个 editText 和一个按钮,其中一个编辑文本获取用户名信息和另一个密码。当我单击按钮时,它会将我传送到另一个活动,在此活动中有一个文本视图和一个按钮,此文本视图显示密码和用户名信息,当我单击按钮时,它应该使用 editor.remove 删除用户名和密码并获取用户到 MainActivity 但是当我单击该按钮时,程序正在关闭。

我的主要活动:

            package com.example.sploginekran;

            import androidx.appcompat.app.AppCompatActivity;
            import android.content.Intent; 
            import android.content.SharedPreferences;
            import android.os.Bundle;
            import android.view.View;
            import android.widget.Button;
            import android.widget.EditText;
            import android.widget.Toast;
            import javax.microedition.khronos.egl.EGLDisplay;

            public class MainActivity extends AppCompatActivity {
                Button buttonGiris;
                EditText editTextName,editTextPassword;
                SharedPreferences sp;
                SharedPreferences.Editor editor;
                @Override
                    protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);



                    buttonGiris = findViewById(R.id.buttonGiris);
                    editTextName = findViewById(R.id.editTextName);
                    editTextPassword = findViewById(R.id.editTextPassword);

                    sp = getSharedPreferences("Bilgiler",MODE_PRIVATE);
                    editor = sp.edit();


                    buttonGiris.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            if (editTextName.getText().toString().equals("admin") && 
                            editTextPassword.getText().toString().equals("123")) {
                            editor.putString("username",editTextName.getText().toString());
                           editor.putString("password",editTextPassword.getText().toString());
                           editor.commit();

                        Intent intent = new Intent(MainActivity.this, AnaEkranActivity.class);
                        startActivity(intent);
                      }
                else {
             Toast.makeText(getApplicationContext(),"Giriş Hatalı",Toast.LENGTH_SHORT).show();
             }
         }
    });
  }
}

我的第二个活动:

            package com.example.sploginekran;

            import androidx.appcompat.app.AppCompatActivity;

            import android.content.Intent;
            import android.content.SharedPreferences;
            import android.os.Bundle;
            import android.view.View;
            import android.widget.Button;
            import android.widget.TextView;
            
            public class AnaEkranActivity extends AppCompatActivity{
            
            Button buttonCikisYap;
            TextView textViewCikti;
            SharedPreferences sp;
            SharedPreferences.Editor editor;
            String username,password;
                        
            @Override
            protected void onCreate(Bundle savedInstanceState) {


            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_ana_ekran);

            buttonCikisYap = findViewById(R.id.buttonCikisYap);
            textViewCikti =  findViewById(R.id.textViewCikti);

            sp = getSharedPreferences("Bilgiler",MODE_PRIVATE);
            sp.edit();

            username = sp.getString("username","Kullanıcı Adı Yok");
            password = sp.getString("password","Şifre Yok");

            textViewCikti.setText(username+"-"+password);


            buttonCikisYap.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View v) {

                    editor.remove("username");
                    editor.remove("password");
                    editor.commit();

                    startActivity(new Intent(AnaEkranActivity.this,MainActivity.class));
            }

         });
      }
    }

我得到的错误:

  java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences$Editor.putString(java.lang.String, java.lang.String)' on a null object reference

此行的第二个活动中也会显示错误:

   editor.remove("username");
  

    



      

【问题讨论】:

  • 我的意思是我知道这个链接,但我不知道如何将它集成到我的代码中,这是我的问题。
  • 只要在使用putString之前定义编辑器对象,就像editor = sp.edit();一样
  • 谢谢,我没有意识到我用错了。

标签: java android nullpointerexception sharedpreferences


【解决方案1】:

在你的第二个活动AnaEkranActivity。你有这个代码:

        SharedPreferences.Editor editor;


        @Override
        protected void onCreate() {
            ...
            sp = getSharedPreferences("Bilgiler",MODE_PRIVATE);
            sp.edit();  // YOU MISSED ASSIGNING editor HERE
            ...
            buttonCikisYap.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View v) {
                  editor.remove("username"); // editor IS NULL HERE
                  ...

您错过了将对象分配给编辑器变量。这就是你得到空指针异常的原因。

修复:

 sp = getSharedPreferences("Bilgiler",MODE_PRIVATE);
 editor = sp.edit();

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2016-06-09
    • 2020-06-12
    • 2015-11-29
    • 2016-12-31
    • 2021-05-09
    相关资源
    最近更新 更多