将用户输入保存到文本文件android studio

时间:2016-02-15 07:04:53

标签: java android

好吧,我试图通过使用Android Studio创建一个简单的应用程序来实现一些基本的java知识。

基本上我的应用会从用户那里收到一些信息并将其保存到文本文件中,该应用程序可作为接收信息的模板。

元素是;

2个文本字段,实际上是一个字段,可以选择输入字母(A,B,C等...)或数字,第二个TextField只接受数字。

6个单选按钮,用户应该而且只能选择一个,我已将这些按钮放在一个无线电组中。

4复选框,用户应勾选适合该条目的方框。

2个按钮,一个用于保存,另一个用于编辑。

如屏幕截图所示。

我的代码到目前为止,我的问题是,我无法弄清楚如何在java文件中实现write命令,就像我在eclipse中学到的那样。我想将条目保存到文本文件中,但不确定android studio中的写入语法是什么,以及如何使用复选框和单选按钮执行此操作?

我已经尝试过几个问题和教程,但无法将它们放在一起,任何指导和提示都会非常感激。

CODE:

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;

public class MainActivity extends AppCompatActivity {



EditText CodNum;
EditText PltNum;
RadioButton radButA;
RadioButton radButD;
RadioButton radButS;
RadioButton radButR;
RadioButton radButO;
RadioButton radButI;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);



    CodNum = (EditText) findViewById(R. id.CodNum);
    PltNum = (EditText) findViewById(R. id.PltNum);
    radButA = (RadioButton) findViewById(R. id.radButA);
    radButD = (RadioButton) findViewById(R. id.radButD);
    radButS = (RadioButton) findViewById(R. id.radButS);
    radButR = (RadioButton) findViewById(R. id.radButR);
    radButO = (RadioButton) findViewById(R. id.radButO);
    radButI = (RadioButton) findViewById(R. id.radButI);
    checkBoxMw = (CheckBox) findViewById(R. id.checkBoxMw);
    checkBoxG7 = (CheckBox) findViewById(R. id.checkBoxG7);
    checkBoxGw = (CheckBox) findViewById(R. id.checkBoxGw);
    checkBoxF = (CheckBox) findViewById(R. id.checkBoxF);
    final FileOutputStream outputStream;
    String fileName = "feederTxtFile";


    Button buttonS = (Button) findViewById(R. id.buttonS);
    buttonS.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                try{
                    outputStream = openFileOutput(fileName,CONTEXT.MOOD_PRIVATE);
                    outputStream.write(String.getBytes());
                    outputStream.close();
                }catch (Exception e){
                    e.printStackTrace();
                }

                }
            });

    Button buttonE = (Button) findViewById(R. id.buttonE);
    buttonE.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //Editing to text file.
        }
    });

好吧所以我更正了代码,并添加了正确的语法来保存代码和数字,但我仍然有一个问题,以保存正确的RadioButton和CheckBox,实际上我能够使它保存单选按钮,但有一个奇怪的消息,其中一部分包括RadioButton id,我想它只是保存Radiobutton名称(A,D,R等)旁边的数字和相同的复选框,我没有任何线索如何处理复选框!?

有人可以告诉我我的RadioButton代码有什么问题以及如何保存支票箱吗?

这是新代码:

公共类MainActivity扩展了AppCompatActivity {

private EditText entryCode;
private EditText entryNum;

private RadioGroup radioBtnGr;
private RadioButton radioButtonA;
private RadioButton radioButtonD;
private RadioButton radioButtonS;
private RadioButton radioButtonR;
private RadioButton radioButtonO;
private RadioButton radioButtonI;

private CheckBox checkBoxGw;
private CheckBox checkBoxG7;
private CheckBox checkBoxKL;
private CheckBox checkBoxFW;


View.OnClickListener checkBoxListener;

private Button buttonE;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    entryAcceptance();
}

public void entryAcceptance(){

    entryCode = (EditText) findViewById(R. id.entryCode);
    entryNum = (EditText) findViewById(R. id.entryNum);

    radioBtnGr = (RadioGroup) findViewById(R. id.RadioBtnGr);
    radioButtonA = (RadioButton)findViewById(R.id.radioButtonA);
    radioButtonD = (RadioButton)findViewById(R.id.radioButtonD);
    radioButtonS = (RadioButton)findViewById(R.id.radioButtonS);
    radioButtonR = (RadioButton)findViewById(R.id.radioButtonR);
    radioButtonO = (RadioButton)findViewById(R.id.radioButtonO);
    radioButtonI = (RadioButton)findViewById(R.id.radioButtonI);

    checkBoxGw = (CheckBox) findViewById(R. id.checkBoxGw);
    checkBoxG7 =  (CheckBox) findViewById(R. id.checkBoxG7);
    checkBoxKL =  (CheckBox) findViewById(R. id.checkBoxKL);
    checkBoxFW =  (CheckBox) findViewById(R. id.checkBoxFW);


}

public void radioButtonClicked(View v)
{
    int selectedCode = radioBtnGr.getCheckedRadioButtonId();
    RadioButton selected = (RadioButton)findViewById(selectedCode);
    toasting(selected.getText().toString());
}

public void saveLogOnClick(View view){
    int selectedCodNum = radioBtnGr.getCheckedRadioButtonId();
    RadioButton selected = (RadioButton)findViewById(selectedCodNum);

    CheckBox selectedChBx = (CheckBox)findViewById();


    String FILENAME = "entry_log.csv";
    String entry = entryCode.getText().toString() + "-" +
            entryNum.getText().toString() +
            selected + "\n";
    try {
        FileOutputStream out = openFileOutput(FILENAME, Context.MODE_APPEND);
        out.write(entry.getBytes());
        out.close();
        toasting("Entry Saved");
    }catch (Exception e){
        e.printStackTrace();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

public void toasting(String msg){
    Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();

}

}

以及CSV文件CSV content内容的屏幕截图 enter image description here enter image description here

好的,所以我能够用RadioButton正确的语法解决问题,以便它保存它所代表的角色(A,D等等)。  我不得不改变这一部分:     String entry = entryCode.getText()。toString()+" - " +                 entryNum.getText()。toString()+                 选择+" \ n&#34 ;; 在"之前添加.getText()。toString();选中"。它保存了在CSV文件中选择的所选RadioButton的正确字符。

但我仍然不确定如何处理CheckBoxes ...如何保存CSV文件中选中的CheckBox的名称!?

想到在某个地方添加if else语句并将其以某种方式保存到CSV文件中,但我想弄清楚是否可以这样做以及如何,或者如果有更好的方法!?

会不断尝试,希望有人能提出建议,并告诉我一个很好的方法......

我仍在尝试获取正确的值,并且只检查复选框的值,我只能列出,True&复选框状态为False,使用以下代码:

    public void saveLogOnClick(View view){
    int selectedCodNum = radioBtnGr.getCheckedRadioButtonId();
    RadioButton selected = (RadioButton)findViewById(selectedCodNum);

   StringBuffer chkdbx = new StringBuffer();
    chkdbx.append(checkBoxGw.isChecked());
    chkdbx.append(checkBoxG7.isChecked());
    chkdbx.append(checkBoxKL.isChecked());
    chkdbx.append(checkBoxFW.isChecked());

    String FILENAME = "entry_log.csv";
    String entry = entryCode.getText().toString() + " - " +
            entryNum.getText().toString() + " - " +
            selected.getText().toString() +" - " + chkdbx.toString() +  "\n";
    try {
        FileOutputStream out = openFileOutput(FILENAME, Context.MODE_APPEND);
        out.write(entry.getBytes());
        out.close();
        toasting("Entry Saved");
    }catch (Exception e){
        e.printStackTrace();
    }
}

以前的参与者对此帖子没有得到任何回复,我知道这是一个直接的问题,而且解决起来很简单,但我正在学习实现新方法,我只是通过构建这个简单的应用程序来学习。 / p>

希望我能以正确的方式得到一些提示。

需要在CSV文件中保存选中框的值,而不是true和false;

最后,记录Checked框的值的正确方法是这样的:

       List<CheckBox>checkBoxes=new ArrayList<>();
    checkBoxes.add(checkBoxGw);
    checkBoxes.add(checkBoxG7);
    checkBoxes.add(checkBoxKL);
    checkBoxes.add(checkBoxFW);
    String checkBoxText = "";

    for(CheckBox checkBox: checkBoxes){
        if(checkBox.isChecked()){
            checkBoxText = checkBoxText + " - " + checkBox.getText().toString();
        }
    }

    String FILENAME = "entry_log.csv";
    String entry = entryCode.getText().toString() + " - " +
            entryNum.getText().toString() + " - " +
            selected.getText().toString() +" - " + checkBoxText +  "\n";

但显然它只会保存第一个选中的复选框并在列表中显示,而不会超出列表的其余部分或保存多个复选框!?

所以我修复了@NickIsaacs建议的部分,即CheckBoxText +&#34; ,&#34; + checBoxes.getText()。toString();并且它应该已经保存了Checked Boxes,但是我没有为Check Box提供任何值!?

我明白这是一个教程而不仅仅是一个问题和答案,应该考虑这是多么简单,但我一直在学习,谢谢你们。

在代码更改后附加了CSV文件的屏幕截图,没有Checked框的值??

ALL RIGHT,最后,小问题是在代码中,复选框列表,并列出复选框,用&#34; ,&#34;应该用其他东西代替,例如&#34; - &#34;,因为保存输入的文件是CSV文件。

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

           String text = editText.getText().toString();
           boolean checked = radioButton.isChecked();
           // do what you want with these
           FileOutputStream outputStream;
           try{
                outputStream = openFileOutput(fileName,CONTEXT.MODE_PRIVATE);
                outputStream.write(text.getBytes());
                outputStream.close();
            }catch (Exception e){
                e.printStackTrace();
            }

编辑:

创建一个CheckBoxes列表。

List<CheckBox> checkBoxes= new ArrayList<CheckBox>();
checkBoxes.add(checkBox1);

//keep adding all your checkboxes to this list
String checkBoxText = "";

for (CheckBox checkBox: checkBoxes){
   if(checkBox.isChecked()){ 
      checkBoxText= checkBoxText + "-" +checkBox.getText().toString();
      //Do what you like with this
   }
}

答案 1 :(得分:1)

只需将OutputStreamWriter用于此目的。它使您可以直接将String作为参数。并写入文件

String data = editText.getText().toString();
private void writeToFile(String data) {
try {
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.openFileOutput("config.txt", Context.MODE_PRIVATE));
    outputStreamWriter.write(data);
    outputStreamWriter.close();
}
catch (IOException e) {
    Log.e("Exception", "File write failed: " + e.toString());
} 
}