【问题标题】:SharedPreferences save a text entered in an EditText and display it in a TextView in another activitySharedPreferences 保存在 EditText 中输入的文本并将其显示在另一个活动的 TextView 中
【发布时间】:2017-10-01 23:13:13
【问题描述】:

我是 Android 开发的初学者,但在某些 TextView 中显示一些文本时,我遇到了保存更改的问题。但一个对我来说更难。 为了解释简单,我有 2 个活动,Activity1 是主要的,Activity2 是用户信息。 在 Activity1(主)中,用户单击按钮(“登录”)然后他继续 Activity2 在这里用户可以输入他的个人信息,然后他点击一个按钮(“保存数据”)然后我将他的数据添加到数据库(SQLite) ,然后当用户单击另一个按钮(“开始”)时,他返回 Activity1 我使用意图以在 Activity1 中的 TextView 上显示他的昵称,并带有“欢迎”+昵称。 但是当用户退出应用程序时,没有保存,更改并没有用昵称保存,但昵称始终在我的数据库中。

我会给你看一些代码: 活动2:

public class ProfilActivity extends Activity {

EditText editNickname; // We just work on the nickname so I just keep it
MyDatabase myDb;
Button bAddData, go;
public SharedPreferences prefs;
private String nicktobesaved;

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.activity_profil);
    myDb = new MyDatabase(this);
    prefs = getSharedPreferences("sharedPreferences", Context.MODE_PRIVATE);

    editNickname = (EditText) findViewById(R.id.pseudo2);
    bAddData = (Button) findViewById(R.id.ajouter);

    nicktobesaved = prefs.getString("nickname", "");
    bAddData.setEnabled(prefs.getBoolean("isEnabled", true) ? true : false);

    AddData();
} // End onCreate()

public void changeNickname(View v) {
    // I delete this method who passed an intent
}

public void AddData() { // When user click on bAddData button
    bAddData.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    nicktobesaved = prefs.getString("nickname", "");
                    nicktobesaved = editPseudo.getText().toString();

// The following code is just for save data on my database SQLite
                    boolean isInserted = myDb.insertData(editNickname.getText().toString());
                    if (isInserted == true) {
                        Toast.makeText(ProfilActivity.this, "Data saved", Toast.LENGTH_LONG).show();
                        prefs.edit().putBoolean("isEnabled", false).apply();
                        bAddData.setEnabled(false);
                    } else {
                        Toast.makeText(ProfilActivity.this, "Data not saved", Toast.LENGTH_LONG).show();
                    }
                }
            }
    );
}
}

Activity1(主要活动):

public class MainActivity extends Activity {

TextView tv;
Button login;
public SharedPreferences prefs;
private String nickname;

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

    prefs = getSharedPreferences("sharedPreferences", Context.MODE_PRIVATE);
    nickname = prefs.getString("nickname", "");

    login = (Button) findViewById(R.id.connexion);
    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intentLogin = new Intent(MainActivity.this, ProfilActivity.class);
            startActivity(intentLogin);
        }
    });

    tv = (TextView)findViewById(R.id.pseudo);

if(nickname.equals("")) {
        tv.setText("Welcome");
    } else {
        tv.setText("Welcome " + nickname);
    }
}
}

Pseudo = 法语昵称, Bienvenue = 法语欢迎, 谢谢大家的帮助,我希望你们能理解我的问题。 皮克罗

【问题讨论】:

    标签: sqlite android-edittext textview save sharedpreferences


    【解决方案1】:

    我建议您使用 Sharedpreferences 来存储基本信息,并阅读一些有关如何在 Android 上保存数据的教程或文档。这里我使用 Sharedpreferences 做了一个例子。希望对您有所帮助!

    import android.app.Activity;
    import android.content.Context;
    import android.content.SharedPreferences;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    /**
     * Created by Hasan on 4.05.2017.
     */
    
    public class ProfilActivity extends Activity {
    
        EditText editName, editNickname;
        Button bAddData;
        public SharedPreferences prefs;
    
        //To be saved elements in sharedpreferences!!!
        private String nicktobesaved, nametobesaved;
    
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            this.setContentView(R.layout.activity_profil);
            prefs = getSharedPreferences("sharedPreferences", Context.MODE_PRIVATE);
    
            editName = (EditText) findViewById(R.id.name);
            editNickname = (EditText) findViewById(R.id.pseudo2);
            bAddData = (Button) findViewById(R.id.ajouter);
    
            //default values
            nametobesaved=prefs.getString("name", "");
            nicktobesaved=prefs.getString("nickname", "");
    
            bAddData.setEnabled(prefs.getBoolean("isEnabled", true) ? true : false);
    
            if(!nametobesaved.equals("")) {
                editName.setText(nametobesaved);
            }
            if (!nicktobesaved.equals("")){
                editNickname.setText(nicktobesaved);
    
            }
    
            AddData();
        } // End onCreate()
    
        public void AddData() { // When user click on bAddData button
            bAddData.setOnClickListener(
                    new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            nametobesaved=prefs.getString("name", "");
                            nicktobesaved=prefs.getString("nickname", "");
    
                            nametobesaved= editName.getText().toString();
                            nicktobesaved= editNickname.getText().toString();
    
                            if(nametobesaved.equals("") || nicktobesaved.equals("")){
                                Toast.makeText(ProfilActivity.this, "Fill all spaces", Toast.LENGTH_LONG).show();
                            }else {
    
                                SharedPreferences.Editor editor = prefs.edit();
                                editor.putString("name", nametobesaved);
                                editor.putString("nickname", nicktobesaved);
                                editor.commit();
    
                                Toast.makeText(ProfilActivity.this, "Data saved", Toast.LENGTH_LONG).show();
                                prefs.edit().putBoolean("isEnabled", false).commit();
    
    
                                bAddData.setEnabled(false);
                            }
    
                        }
                    }
            );
        }
    }
    

    将昵称保存到 Sharedpreferences 后,您需要在 Main 活动中加载它。它是这样的:

    public class MainActivity extends Activity {
    
    public static final int PROFIL_REQ = 1;
    public static final String PSEUDO="nickname";
    TextView tv;
    Button login;
    
        //Sharedpreferences and nick name variables
        private SharedPreferences prefs;
        private String nickname;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView)findViewById(R.id.pseudo);
    
                //Load or create sharedpreferences
            prefs = getSharedPreferences("sharedPreferences", Context.MODE_PRIVATE);
            nickname = prefs.getString("nickname", "");
    
            if(nickname.equals("")) {
                tv.setText("Welcome");
            }else{
                tv.setText("Welcome "+ nickname);
            }
        }
    

    那是因为您删除了 sharedpreferences 编辑器。

    public void AddData() { // When user click on bAddData button
        bAddData.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        nicktobesaved = prefs.getString("nickname", "");
                        nicktobesaved = editPseudo.getText().toString();
    
    
    //DO NOT DELETE HERE
    
                                        SharedPreferences.Editor editor = prefs.edit();
    
                                    editor.putString("nickname", nicktobesaved);
                                    editor.commit();
    
    // The following code is just for save data on my database SQLite
                        boolean isInserted = myDb.insertData(editNickname.getText().toString());
                        if (isInserted == true) {
                            Toast.makeText(ProfilActivity.this, "Data saved", Toast.LENGTH_LONG).show();
                            prefs.edit().putBoolean("isEnabled", false).apply();
                            bAddData.setEnabled(false);
                        } else {
                            Toast.makeText(ProfilActivity.this, "Data not saved", Toast.LENGTH_LONG).show();
                        }
                    }
                }
        );
    }
    

    【讨论】:

    • 好的,谢谢哈桑,我刚读过它,所以我不需要更改 MainActivity 上的任何内容,对吧?因为我希望ProfilActivity(activity2)中的昵称显示在MainActivity(activity1)上
    • 实际上用户在ProfilActivity的editText中输入的昵称,我得到editText的文本会抛出一个Intent,以便在MainActivity的TextView上显示这个昵称,我想在这个TextView中使用昵称保存。因为哟代码更改了TextView中的editText,我不想为我的错误解释道歉。
    • 查看编辑后的答案。我在 Mainactivity oncreate 中进行了一些原始更改以加载昵称并在电视中显示。
    • 好的,所以我不需要在 MainActivity 中使用意图,对吧?而且我不需要在 ProfilActivity 上的 Textview 中更改 editText,所以我写了那个(我编辑了我的帖子,你可以检查一下),但它不起作用。
    • 在主Activity中用户点击登录可以打开ProfilActivity,保存用户数据后可以返回主Activity。
    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2017-05-31
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多