Nano Hash - криптовалюты, майнинг, программирование

SharedPreferences сохраняет текст, введенный в EditText, и отображает его в TextView в другом действии.

Я новичок в разработке Android, и у меня проблема с сохранением изменений, когда некоторые тексты отображаются в некоторых TextViews. Но с одним мне сложнее. Для простого объяснения у меня есть 2 действия, Activity1 — основное, Activity2 — информация о пользователе. В Activity1 (Main) пользователь нажимает кнопку («логин»), затем переходит к Activity2, здесь пользователь может ввести свою личную информацию, и он нажимает кнопку («сохранить данные»), затем я добавляю свои данные в базу данных (SQLite) , затем, когда пользователь нажимает другую кнопку («перейти»), он возвращается в Activity1. Я использую намерение, чтобы показать его псевдоним в TextView в Activity1 с псевдонимом «Добро пожаловать» +. Но когда пользователь выходит из приложения, сохранения нет, изменение не сохраняется с никнеймом, но никнейм всегда в моей базе.

Я покажу вам код: Activity2:

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();
                    }
                }
            }
    );
}
}

Деятельность 1 (основная деятельность):

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);
    }
}
}

Псевдо = псевдоним на французском, Bienvenue = добро пожаловать на французском, Спасибо всем за помощь, надеюсь, вы поняли мой вопрос. Пиккоро


Ответы:


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 вам необходимо загрузить его в основной активности. Это выглядит так:

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);
        }
    }

Это потому, что вы удалили редактор общих настроек.

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();
                    }
                }
            }
    );
}
04.05.2017
  • Хорошо, спасибо, Хасан, я только что прочитал это, так что мне не нужно ничего менять в MainActivity, верно? Потому что я хочу, чтобы никнейм из ProfilActivity (Activity2) отображался в MainActivity (Activity1) 04.05.2017
  • На самом деле псевдоним, который пользователь ввел в editText в ProfilActivity, я получаю текст editText, который выдает намерение, чтобы отобразить этот псевдоним в TextView в MainActivity, и я хочу, чтобы в этом TextView сохранялся псевдоним. Поскольку ваш код изменяет editText в TextView, я не хочу этого делать, извините за мое плохое объяснение. 04.05.2017
  • Проверьте отредактированный ответ. Я сделал некоторые изменения в Mainactivity oncreate примитивно, чтобы загрузить никнейм и показать его на телевидении. 04.05.2017
  • Итак, мне не нужно использовать намерение в MainActivity, верно? И мне не нужно менять editText в Textview в ProfilActivity, поэтому я пишу это (я отредактировал свой пост, можете ли вы его проверить), но это не работает. 04.05.2017
  • В основном действии, когда пользователь нажимает кнопку входа, вы можете открыть ProfilActivity, а после сохранения данных пользователя вы можете вернуться к основному действию. 04.05.2017
  • Хорошо, извините, я только что закончил редактировать это сейчас. Может я неправильно понимаю 04.05.2017
  • Я подозреваю, что ваш код базы данных SQL не работает, но я не уверен. Теперь с моим отредактированным кодом вы просто сохраняете и загружаете ник с помощью общих настроек. Видишь, я выделил жирным шрифтом то, где ты ошибся. 04.05.2017
  • Хорошо, я попробую, моя база данных может работать, я просто не написал весь код об этом. 04.05.2017
  • Это может работать хорошо, но, возможно, вы правы с моей базой данных, что-то не так с псевдонимом, потому что, если пользователь хочет изменить свой псевдоним, он просто изменился в базе данных и не отображает изменение в SharedPreferences, но это не так. не важно. я думаю, будет лучше, если я буду использовать текст, сохраненный в моей базе данных, вместо того, чтобы записывать текст в EditText. 04.05.2017
  • Спасибо за время, которое вы тратите на помощь мне. 04.05.2017
  • И последний вопрос: пользователь также может сделать снимок в ProfilActivity, нажав кнопку в этом действии, после чего он сможет увидеть эту фотографию в ImageView. Как вы думаете, я могу также сохранить отображение этой фотографии с помощью SharedPreferences? Если да, то как быть с prefs.edit(), есть метод, который я могу использовать? 04.05.2017
  • Я не очень разбираюсь в сохранении изображения (должно быть, для отображения uri изображения и установки этого uri в изображение, я думаю, я не уверен.), но вы можете выполнить поиск на веб-сайте, есть много примеров . Я рад, я помог вам. Это не проблема. 04.05.2017
  • Хорошо, но для отображения у меня нет проблем с этим, просто я хочу сохранить сделанное изображение, которое отображается в imageView, если я выйду из приложения, фотография исчезнет 04.05.2017
  • Да. Есть темы по этому поводу, посмотрите. Насколько мне известно, общие настройки не сохраняют изображения. 04.05.2017
  • Хорошо, спасибо, я проверю, большое спасибо за помощь 04.05.2017
  • Это не проблема ;) 04.05.2017
  • Привет, Хасан, ты знаешь что-нибудь о том, как сохранить значение int, которое я поместил в TextView? 06.05.2017
  • Привет, сначала вам нужно преобразовать строку в целое число следующим образом: int x = Integer.parseInt(string); Затем вы должны сохранить его в общих настройках, используя getInt putInt. 06.05.2017
  • Хорошо, я попробую, спасибо, сейчас я не могу, но я попробую завтра, во Франции ночь 06.05.2017
  • На самом деле я конвертирую int в строку: tvRed.setText(Nombre de ...: + String.valueOf(nbRed)); для отображения значения моего INT в TextView. Я пытаюсь сохранить это значение, но все вообще не работает. Я пытался использовать SharedPreferences с getInt и putInt, но никак, не могли бы вы помочь мне в последний раз с SharedPreferences? 08.05.2017
  • Prefs SharedPreferences = getSharedPreferences (sharedPreferences, Context.MODE_PRIVATE); Someint = prefs.getInt(someint, 0); Редактор SharedPreferences.Editor = prefs.edit(); editor.putInt(что-то, nbRed); редактор.коммит(); 08.05.2017
  • Эй, спасибо за ответ, просто кто-то, какой тип переменной? инт? Потому что у меня ошибка на someint = prefs.getInt(someint, 0); он сказал неправильный второй аргумент 08.05.2017
  • Хасан, я только что задал новый вопрос: вы можете увидеть его здесь: stackoverflow.com/questions/43849352/ 08.05.2017
  • Спасибо, если ты снова поможешь мне, это последний раз, когда я тебя беспокою, обещаю 08.05.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..