Как правильно добавить текст в TextView из файла SharedPreferences вместо его перезаписи? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть два класса, один класс экономит вес, затем в другом классе / деятельности я хочу журнал, который добавляет вес вместе с датой и временем, затем создает новую строку и отображает следующий вес. Таким образом, пользователь может отслеживать свои ежедневные изменения веса.

Проблема в том, что я новичок в Java и явно застрял на глупой проблеме. Каждый раз, когда я пытаюсь добавить его, вместо этого просто перезаписывается. Мне, вероятно, нужно сохранить его, а затем добавить его? может быть? Я пробовал несколько разных вещей, и ничто не работает так хорошо.

Это третий день Явы. Извинения.

Попытка создания списка, который сохраняется с общими настройками. Либо сделал это неправильно, либо это не сработало. Также пытался просто набрать вес и добавить его, но все это перезаписывается.

Моя активность в журнале:

public class LogActivity extends AppCompatActivity {

    TextView logger;
    //TextView more;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_log);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        Button back = findViewById(R.id.btnBack);

        logger = findViewById(R.id.txtLog);

        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date = new Date();


        SharedPreferences log = getSharedPreferences("MyPrefsFile", 0);

        //Float value = log.getFloat("floatingLog",0);
        Float value = log.getFloat("weight", 0);
        //more.append(logger + "Weight: " + value.toString() + " at: " + dateFormat.format(date) + "\n");
        logger.append("Weight: " + value.toString() + " at: " + dateFormat.format(date) + "\n");

        // Adding back button
        back.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v){
                Intent i = new Intent(getApplicationContext(),MainActivity.class);
                startActivity(i);
            }
        });

//        SharedPreferences settings7 = getSharedPreferences("PREFS",0);
//        String wordsString = settings7.getString("words","");
//        String[] itemWords = wordsString.split(",");
//        List<String> items = new ArrayList<String>();
//        for (int i = 0; i < itemWords.length; i++){
//            items.add(itemWords[i]);
//        }
//        for (int i = 0; i < items.size(); i++){
//            Log.d("list", items.get(i));
//        }




    }
}

Это получение общих привилегий отсюда, в моей ProfileActivity:

 save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((TextView) findViewById(R.id.txtWeight)).setText(findViewById(R.id.txtNewWeight).toString());
                floatingLog = weight.toString();
                SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
                SharedPreferences.Editor editor = settings.edit();
                floatingWeight = Float.valueOf(newWeight.getText().toString());

                editor.putString("floatingLog", floatingLog);
                editor.putFloat("weight", floatingWeight);
                editor.apply();
                editor.commit();
                weight.setText(String.valueOf(floatingWeight));

1 Ответ

0 голосов
/ 30 апреля 2019

Здравствуйте и добро пожаловать на SO!

на самом деле в TextView, вы можете получить доступ к текущему значению через TextView#getText(), и после этого вы можете обновить текстовое значение аналогично, используя TextView#setText(String text)

, поэтомувам нужно написать что-то вроде этого:

String currentText = logger.getText();
String updatedText = currentText + "Weight: " + value.toString() + " at: " + dateFormat.format(date) + "\n";
logger.setText(updatedText)

Тада!

ОБНОВЛЕНИЕ

Я думаю, что ваша проблема в том, как вы сохраняете свои записи вваш sharedPrefs в этой строке editor.putFloat("weight", floatingWeight); в этой части вы перезаписываете существующее значение, самый простой подход, который приходит мне в голову, состоит в том, что вместо того, чтобы сохранять вес, подобный этому, вы создаете массив весов и добавляете его в конец каждый день.и сохранить массив.однако будет гораздо лучше, если вы используете базу данных для этого, что дает вам гораздо большую гибкость.

для использования базы данных взгляните на официальный Android или orm Android Room это очень простои просто

...