Android 追加文本文件

2024-04-04

我试图将对话框选择器中的唤醒时间和睡眠时间记录到这样的文本文件中,但是对方法 commitToFile2 的调用不会附加文本文件“savedData.txt”。

我知道这段代码非常非常肮脏。我是 Java 新手,所以任何其他建议将不胜感激。

package com.buttinyourface;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.AdapterView.OnItemClickListener;

public class SettingsActivity extends Activity {

    public int wakeHour;
    public int wakeMinute;
    public int sleepHour;
    public int sleepMinute;
    public String sleepHourText = "No Data";
    public String sleepMinuteText = "No Data";
    public String outputTime = "No Data";
    public String wakeHourText = "No Data";
    private ListView lv;
    Dialog newDialogBox;
    Context appContext;
    protected Context context;
    static final private int WAKE_TIME = 0;
    static final private int SLEEP_TIME = 1;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
        final String[] settingsList = getResources().getStringArray(
                R.array.settingsStringArray);
        lv = (ListView) findViewById(R.id.list);
        TextView wakeHourTextView = (TextView) findViewById(R.id.TextView01);
        lv.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                int settingsPosition = position;
                if (settingsPosition == 0) {
                    showDialog(WAKE_TIME);
                    wakeHourText = Integer.toString(wakeHour);
                }
                if (settingsPosition == 1) {
                    showDialog(SLEEP_TIME);
                }
            }
        });
        lv.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, settingsList));
        wakeHourTextView.setText(outputTime);
    }

    public void onPrepareDialog(int id, Dialog dialog) {
        switch (id) {
        case WAKE_TIME:
            break;
        case SLEEP_TIME:
            break;
        }
    }

    @Override
    public Dialog onCreateDialog(int id) {
        switch (id) {
        case WAKE_TIME:
            return new TimePickerDialog(this, WakeTimeSetListener, wakeHour,
                    wakeMinute, false);
        case SLEEP_TIME:
            return new TimePickerDialog(this, SleepTimeSetListener, sleepHour,
                    sleepMinute, false);
        }
        return null;
    }

    private TimePickerDialog.OnTimeSetListener WakeTimeSetListener =
                          new TimePickerDialog.OnTimeSetListener() {
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            wakeHour = hourOfDay;
            wakeMinute = minute;
            String wakeHourText = Integer.toString(hourOfDay);
            String wakeMinuteText = Integer.toString(minute);
            String preftime = hourOfDay + ":" + minute;
            SimpleDateFormat df = new SimpleDateFormat("HH:mm");
            SimpleDateFormat dfOut = new SimpleDateFormat("hh:mma");
            Date date = null;
            try {
                date = df.parse(preftime);
            } catch (ParseException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            String outputWakeTime = dfOut.format(date);
            try {
                commitToFile(wakeHourText, wakeMinuteText, outputWakeTime);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
    private TimePickerDialog.OnTimeSetListener SleepTimeSetListener =
                          new TimePickerDialog.OnTimeSetListener() {
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            sleepHour = hourOfDay;
            sleepMinute = minute;
            String sleepHourText = Integer.toString(hourOfDay);
            String sleepMinuteText = Integer.toString(minute);
            String preftime = hourOfDay + ":" + minute;
            SimpleDateFormat df = new SimpleDateFormat("HH:mm");
            SimpleDateFormat dfOut = new SimpleDateFormat("hh:mma");
            Date date = null;
            try {
                date = df.parse(preftime);
            } catch (ParseException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            String sleepOutputTime = dfOut.format(date);
            try {
                commitToFile2(sleepHourText, sleepMinuteText, sleepOutputTime);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };

    private void commitToFile(String wakeHourText, String wakeMinuteText,
            String outputWakeTime) throws IOException {
        final String entryString = new String("wakeHour=" + wakeHourText
                + ";wakeMinute=" + wakeMinuteText + ";wakeTime="
                + outputWakeTime + ";");
        FileOutputStream fOut = openFileOutput("savedData.txt",
                MODE_WORLD_READABLE);
        OutputStreamWriter osw = new OutputStreamWriter(fOut);
        osw.write(entryString);
        osw.flush();
        osw.close();
    }

    private void commitToFile2(String sleepHourText, String sleepMinuteText,
            String sleepOutputTime) throws IOException {
        final String entryString = new String("sleepHour=" + sleepHourText
                + ";sleepMinute=" + sleepMinuteText + ";sleepTime="
                + sleepOutputTime + ";");
        FileOutputStream fOut = openFileOutput("savedData.txt",
                MODE_WORLD_READABLE);
        OutputStreamWriter osw = new OutputStreamWriter(fOut);
        osw.write(entryString);
        osw.flush();
        osw.close();
    }
}

我明白了......我必须改变线路

FileOutputStream fOut = openFileOutput("savedData.txt", MODE_WORLD_READABLE);

to

FileOutputStream fOut = openFileOutput("savedData.txt",  MODE_APPEND);

之后,我能够附加文本文件,而不会覆盖文本文件中已有的数据。感谢你们的帮助。我想有时去谷歌上的第四页很有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 追加文本文件 的相关文章

  • 所有任务完成后继续任务

    在某些类中 我想使用 Task 异步加载 2 个集合并停止 busyindicator 我尝试这样的事情 var uiScheduler TaskScheduler FromCurrentSynchronizationContext Wai
  • 获取带有注释的所有类并将它们添加到 android 中的 hashMap

    我不确定这是否可能 但我基本上希望能够轻松地将新项目添加到列表中 只需添加带有特殊注释的类即可 我能想到的唯一例子就是我目前正在做的事情 用户可以完成很多 挑战 目前我的应用程序中有一个用于 挑战 的包 我希望能够在该包中创建一个新类 给它
  • 如何更改android上的hosts文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已经成功root了我的三星Galaxy Mini android 2 2 1 并认为我可以改变任何东西 就像root通常可以的那样 我想更改 And
  • 是否可以将 Mozilla Persona (BrowserID) 与移动应用程序一起使用?

    是否有可能easily use Mozilla 角色 http www mozilla org en US persona 浏览器ID https developer mozilla org en BrowserID Why Browser
  • JavaScript接口注入漏洞修复

    我收到了来自 Google Play 管理中心的警告 提示我这一页 https support google com faqs answer 9095419因为我在我的应用程序中使用了 JavaScript 接口 并建议两个选项来解决该问题
  • 如何在列表视图中每行右侧显示 4 个图标

    我想在列表视图的每一行右侧设置 3 个图标 我正在制作购物应用程序 我希望在列表视图中用户选择任何产品时 这样他 她可以以 3 种方式查看产品 就像用户选择图标一样1 这样用户可以在网格视图中看到产品 如果用户选择图标 2 这样用户可以在图
  • 所选设备不兼容 - Android Studio

    我之前已经解决了这个问题 但现在不能 我需要永久修复 在测试我的应用程序时 Android Studio 中的一切都很顺利 我现在遇到了 所选设备不兼容 的问题 当我去运行应用程序时 我想知道如何阻止它读取我手机的 API 作为 1 而不是
  • 聚合联系人会自动添加吗?

    您一定也在其他地方看到过这段代码 但显然这个异常没有答案 编辑 如果您来这里寻找通过 vcardio 恢复联系人的解决方案 这就是它 我在使用时得到了这个vCardIO http code google com p vcardio Andr
  • Android:随着设备移动在mapv2上绘制路径

    我正在制作一个应用程序 我必须在其中当我的设备移动时在地图上绘制路径 我搜索了我的教程但都显示在两点之间绘制路径但是我要当我的设备移动时绘制路径 任何有关此的帮助将不胜感激 当你的设备移动时 你的意思是什么 无论哪种方式 您都必须使用位置侦
  • 使用 Android 浏览器的 HTML5 离线存储

    我正在研究如何使用 Android 设备来创建需要离线使用的网站 我还没有找到很多关于Android浏览器如何处理HTML5的localStorage和WebSQL的信息 有人知道这些的尺寸限制吗 它们是否可以更改 我知道移动 Safari
  • 为什么找不到ImageView类?

    当我转到图形布局时 我在创建第一个 Android 应用程序 pdf Android Application Development for For Dummies 中的静默切换模式 时遇到了麻烦 在 main xml 文件中插入了 Ima
  • 来自公共字符串的 Android RSA 加密

    我正在开发一个 Android 应用程序 我希望用户能够使用其他人的公钥加密消息 系统将生成公钥 私钥对 然后可以将消息秘密发送给其他用户 我正在创建一个加密类 它将处理消息的加密 解密 不幸的是我遇到了一些问题 在这种方法中 我想传递用户
  • 如何在Eclipse中配置Tesseract进行Android开发?

    我已经从事 Android 工作 6 个月了 至此我对Android开发有了基本的了解 现在我想使用 Tesseract 开发一个 OCR Android 应用程序 为此 我从 Tesseract 下载了 android ndk r6b t
  • Marshmallow 中的手电筒控制

    我对最新 Marshmallow 版本中的相机 更具体地说是手电筒 有疑问 在任何棉花糖之前的版本上 我需要执行以下操作来打开 关闭闪光灯 private void turnFlashOn final Camera camera int f
  • 如何在Fragment之间传递数据?

    对于所有那些投反对票并投票决定关闭这个问题的人 认为它与 textview 的范围有关 然后看看 它与 textview 的范围无关 无法在片段之间传递数据 应用程序崩溃 我不知道我做错了什么 我点击了此链接http manishkpr w
  • 如何使用 Lint Option StopShip 使 Grade 发布构建失败?

    我读过很多关于StopShipAndroid Lint Check 和 Gradle 支持 http tools android com tips lint checks http tools android com tips lint c
  • 尝试初始化 AudioRecord 时出现“无法获取记录源 1 的音频输入”

    当尝试初始化 AudioRecord 对象并尝试使用 Eclipse 使用模拟器录制声音时 我不断收到此错误 我尝试过各种位采样率 8000 是唯一有效的 但错误仍然出现 我尝试过各种版本的sdk 1 5 1 6 2 2 2和2 3 1 以
  • 不要使用android内置的org.json

    我写了一个使用的库org json http json org A 来自 json org 假设 Android 使用相同的 在 android 中也称为org json B 只是它遗漏了一些相对关键的功能 现在我想做的是设置我的 grad
  • 进度对话框未显示在屏幕上

    我根据亲爱的 Mayank answer 编辑了我的代码 但它没有显示在方法开始之前在 displayMsg 方法中作为输入发送的任何消息 我应该说 MethodTest 是通过 nfc 和 onNewIntent Intent Inten
  • Android Vector Drawable 不支持。如何修复它?

    尝试从 AndroidStudio 2 2 Ubuntu 14 04 的本地 svg 文件生成矢量资源时出现此错误 Could not generate a preview In icon svg ERROR line 6

随机推荐

  • 如何在C#中获取网站根路径?

    在 C 代码中 我需要为图像编写 src 有谁知道如何在c 中获取网站根路径 我的文件夹结构是 UI Image 我发现当我使用 string rootpath Page Request ApplicationPath 如果在调试模式下运行
  • 使用 memset 初始化浮点数组

    这是我想尝试编写的代码 include
  • 如何使用 perl 解释器转义单引号?

    如何转义 bash 表达式中的单引号find xargs perl pi e s conflicts gt g 我想替换我的文件中的字符串 conflicts gt FatalError和gpojd都给出了很好的解决方案 我将用另一种选择来
  • 如何使用Python获取请求中响应的原始内容?

    尝试获取HTTP响应内容的原始数据requests在Python中 我有兴趣通过另一个渠道转发响应 这意味着理想情况下内容应该尽可能原始 这样做的好方法是什么 After requests get 您可以使用r content提取原始字节类
  • 如何在今天的 v8 中包含另一个 js 文件?

    我找到了一个旧的答案和后来的更新here https stackoverflow com questions 1149340 how do you include another js file in googles v8 但是我很难将此代
  • GoJS中如何动态添加Node数据和Link数据?

    myDiagram model new go GraphLinksModel key Alpha color lightblue key Delta color pink from Alpha to Alpha from Delta to
  • PHPExcel 和文本换行

    我知道这行代码将使单元格文本换行 objPHPExcel gt getActiveSheet gt getStyle D1 gt getAlignment gt setWrapText true D1 是所选的单元格 有没有办法让整个 Ex
  • 将 void* 转换为二维数组

    我有一个 void 我正在进入某个函数 它实际上是一个二维 int 数组 我想将它作为参数发送给需要二维数组的函数 正确施放它的最佳方法是什么 void foo void val How to cast val in order to se
  • Android Compose 中的 TextField 与键盘重叠

    我有一个TextField在列中verticalScroll 添加大量字符时 文本字段大小超出键盘范围 我看不到正在输入的内容 我尝试使用this https google github io accompanist insets lib
  • 从 Android UI 抽象 Firebase

    我面临的问题是 当我们将 Firebase 与 Activity 或 Fragment 连接时 Firebase 作为实时数据库效果很好 但是尝试与视图元素分离并为其创建一些抽象 因为例如我们想在测试时或将来替换它 变得相当困难 尤其是尝试
  • 在 Python 中读取 JSON 对象时遇到问题

    我有一个 JSON 对象 我试图使用 Python 读取它 但遇到一些问题 我有一个名为 test txt 的文件 其中包含收到的 JSON 对象 test txt 的内容如下 Sections Now Thursday 3 Februar
  • 如果不分配给变量,为什么 Powershell Array of Array 显示不同的内容

    如果 cmdlet 返回数组的数组 例如 function test results New Object System Collections ArrayList array for idx 0 idx lt 3 idx obj New
  • AFHTTPClient.m 不再出现在 AFNetworking 中?

    我正在遵循教程 http bit ly 1dbLaPh http bit ly 1dbLaPh 使用 AFNetworking 它说要创建一个从 AFHTTPClient 派生的新类 这个选项没有出现在 SubClass Of 字段中 我检
  • 何时使用“raise_for_status”与“status_code”测试

    我一直用 r requests get url if r status code 200 my passing code else anything else if this even exists 现在我正在解决另一个问题并决定允许其他错
  • 出现异常:指定的网络名称不再可用。 (0x80070040)尝试使用 ReadToEndAsync() 读取 HttpRequest Body 时

    我有一个 API post Web 方法 尝试使用 StreamReader 获取请求正文ReadToEndAsync 大多数情况下它工作正常 但是对于非常随机的请求 我收到以下异常 客户端已断开连接 有内在的例外 指定的网络名称不再可用
  • Mat-accordion 不是已知元素

    我正在开发一个 angular10 应用程序 我尝试在我的项目中使用 mat accordion 每个组件使用模块 每个组件都有自己的 module ts 文件 下面是我的模块文件代码 import NgModule from angula
  • 根据 hcharter 中给定的序列设置热图颜色范围

    在这里我尝试使用创建热图highcharter hcharter where 小于 1应该是一种颜色 粉红色 1 to 1应该是透明或白色的 并且大于 1应该是另一种颜色 紫色 目前我已经使用编写代码hchart 并使用color stop
  • 在 jquery 选择器中使用 rel 属性中的变量

    我使用 rel 属性将 div 与按钮匹配 我在相应 div 的 rel 字段中使用按钮的 id 有多个按钮 单击按钮时 我想使用 show 方法显示相应的 div 并隐藏其他 div 按钮工作正常 但 div 没有响应 我的直觉告诉我 我
  • C Win32:从 HBITMAP 保存 .bmp 图像

    我正在使用图像采集卡 需要从计算机内存中获取图像并将其保存在图像文件中 经过几天的尝试 我最终得到了以下两个函数 它创建了一个文件 Windows操作系统能够运行 bmp文件 但位图文件是黑色的 图像大小为900KB 640 480 有人知
  • Android 追加文本文件

    我试图将对话框选择器中的唤醒时间和睡眠时间记录到这样的文本文件中 但是对方法 commitToFile2 的调用不会附加文本文件 savedData txt 我知道这段代码非常非常肮脏 我是 Java 新手 所以任何其他建议将不胜感激 pa