java - 如何将 SharedPreferences 文件中的文本正确 append 到 TextView 而不是覆盖它?

标签 java android save append sharedpreferences

我有两个类(class),一个类(class)正在减肥,然后在另一个类(class)/Activity 中我想要一个日志,该日志 append 重量以及日期和时间,然后创建一个新行并显示下一个重量。这样用户就可以跟踪自己每天的体重变化。

问题是我是 Java 新手,显然陷入了一个愚蠢的问题。每次我尝试 append 它而不是只是覆盖。我可能需要保存它然后添加它?或许?我尝试了几种不同的方法,但没有一种效果那么好。

这是 Java 的第三天。抱歉。

尝试制作一个使用共享首选项保存的列表。要么做错了,要么没成功。还尝试仅调用权重并 append 它,但它会覆盖所有内容。

我的日志记录 Activity :

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

最佳答案

您好,欢迎来到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", floatWeight); 在这部分中,您将覆盖现有值, 我想到的最简单的方法是,不是像这样节省重量,而是创建一个权重数组并每天 append 到它的末尾并存储该数组。 然而,如果您使用数据库来实现这一点会更好,这会给您带来更大的灵 active 。

使用数据库看看Android官方orm Android Room非常简单明了

关于java - 如何将 SharedPreferences 文件中的文本正确 append 到 TextView 而不是覆盖它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920931/

相关文章:

java - OnCretae() 不算数

php - CakePHP 外键未保存在 ownTo 关系中

java 。 sql。 SQLException : Before Start Of Result Set. 如何解决?

android - 使用 Xamarin 的 NDK Android 应用程序中的 DllNotFoundException

java - 修改inputType :number|phone Android Studio

iphone - 保存 UIPicker 中选择的值的最佳方法?

c# - 将 BitmapImage 保存到文件

java - 无法在 netbeans 中使用文本字段过滤 jtable 行

eclipse - 在eclipse之外使用JDK

java - 将非 exe (Labview VI) 外部程序调用到 Java 中