Java 如何在SharedReferences中永久保存数据

Java 如何在SharedReferences中永久保存数据,java,android-studio,sharedpreferences,Java,Android Studio,Sharedpreferences,我一直在制作一个应用程序,它会在我的应用程序第一次启动时询问一个名称,然后应该显示它,但每当我试图保存时,我会出现NullPointerException或名称 显示为空 这是我的main活动 package com.example.sas; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.Manifest; import android.c

我一直在制作一个应用程序,它会在我的应用程序第一次启动时询问一个名称,然后应该显示它,但每当我试图保存时,我会出现
NullPointerException
或名称 显示为空

这是我的
main活动

package com.example.sas;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity implements namedialog.ExampleDialogListenerName {
    private ImageView imageView;
    public static final int IMAGE_PICK_CODE = 1000;
    private SharedPreferences prefs;
    public static final int PERMISSION_CODE = 1001;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SharedPreferences preferences = getSharedPreferences("preferences",MODE_PRIVATE);
        boolean firststart = preferences.getBoolean("firstStart",true);
        if (firststart) {
            OpenNameDialog();
        }else {
            savename();
        }
        TextView dateview = findViewById(R.id.date);
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY");
        String date = dateFormat.format(calendar.getTime());
        dateview.setText(date);
        imageView = findViewById(R.id.selfpicture);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){

                    if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE ) == PackageManager.PERMISSION_DENIED){
                        String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE};
                        requestPermissions(permissions,PERMISSION_CODE);
                    }else {
                        pickImageFromGallery();
                    }
                }else {
                    pickImageFromGallery();
                }
            }
        });
    }

    private void OpenNameDialog(){
        namedialog namedialog = new namedialog();
        namedialog.show(getSupportFragmentManager(),"name dialog");
        SharedPreferences preferences = getSharedPreferences("preferences",MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putBoolean("firstStart",false);
        editor.apply();
    }

    @Override
    public void ApplyNameDialog(String name) {
       prefs = getSharedPreferences("prefs",MODE_PRIVATE);
       final SharedPreferences.Editor editor = prefs.edit();
        editor.putString("susanth",name);
    }
    public void savename(){
        String names = prefs.getString("susanth","");
        TextView display = findViewById(R.id.namename);
        display.setText(names);
    }

    public void pickImageFromGallery(){
        Intent intent1 = new Intent(Intent.ACTION_PICK);
        intent1.setType("image/*");
        startActivityForResult(intent1,IMAGE_PICK_CODE);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case PERMISSION_CODE:{
               if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                   pickImageFromGallery();
               }else {
                   Toast.makeText(getApplicationContext(),"Permission Denied",Toast.LENGTH_SHORT).show();
               }
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == IMAGE_PICK_CODE) {
            imageView.setImageURI(data.getData());
        }
    }
}
这是我的
名称对话框

package com.example.sas;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatDialogFragment;

import java.util.Objects;

public class namedialog extends AppCompatDialogFragment {
    private EditText name ;
    private ExampleDialogListenerName listener;
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = Objects.requireNonNull(getActivity()).getLayoutInflater();
        View view = inflater.inflate(R.layout.namedialog,null);


        builder.setView(view)
                .setTitle("Welcome Fill your details")
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        final String namef = name.getText().toString();
                        listener.ApplyNameDialog(namef);
                    }
                });
        name = view.findViewById(R.id.etname);
        return  builder.create();
    }

    @Override
    public void onAttach(@NonNull Context context) {
        context = getActivity();
        super.onAttach(context);

        try {
            listener = (ExampleDialogListenerName) context;
        } catch (ClassCastException e) {
            throw  new  ClassCastException(context.toString()+
                    "must implement ExampleDialogListenerName");
        }
    }

    public interface  ExampleDialogListenerName{
        void ApplyNameDialog (String name);
    }


}
你能告诉我应该用什么来永久保存这个名字吗。 请帮我快点谢谢:)

这根绳子似乎永远不会被保存。你应该打电话给编辑。或编辑

@Override
public void ApplyNameDialog(String name) {
   prefs = getSharedPreferences("prefs",MODE_PRIVATE);
   final SharedPreferences.Editor editor = prefs.edit();
    editor.putString("susanth",name);
}