【问题标题】:How to properly append text to TextView from SharedPreferences file instead of overwriting it?如何从 SharedPreferences 文件正确地将文本附加到 TextView 而不是覆盖它?
【发布时间】:2019-09-19 02:45:56
【问题描述】:

我有两个班级,一个班级正在减肥,然后在另一个班级/活动中,我想要一个日志,将重量与日期和时间一起附加,然后换行并显示下一个重量。这样用户就可以跟踪他们每天的体重变化。

问题是我是 Java 的新手,显然被困在一个愚蠢的问题上。每次我尝试追加它而不是覆盖它。我可能需要保存它然后添加它?可能是?我尝试了一些不同的方法,但没有一个效果那么好。

这是 Java 的第 3 天。道歉。

尝试制作一个使用共享首选项保存的列表。要么做错了,要么没用。还尝试只调用权重并附加它,但它会全部覆盖。

我的日志记录活动:

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

【问题讨论】:

    标签: java android save append sharedpreferences


    【解决方案1】:

    您好,欢迎来到 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 非常简单直接

    【讨论】:

    • 谢谢!像大多数人一样,我一直在潜伏……多年……试试代码。也许我没有正确实现它或其他什么,但它仍然只是完全替换当前文本而不是附加任何内容。我是否提到我有一个显示重量的主页?这可能是事情破裂的原因吗?尽管主页所做的只是获取重量值并将其写入文本框以显示当前重量。我完全迷失了对不起:P
    • 我从您的评论中了解到,也许当这段代码运行时,您的记录器没有显示任何内容!是的,我刚刚再次查看了您的代码,您在onCreate 中调用了它!我会更新我的答案
    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2016-04-04
    • 2014-03-07
    相关资源
    最近更新 更多