Android 在内存中存储用户输入数据
我正在尝试创建一个简单的应用程序,它基本上是一个跟踪程序,可以跟踪大学生每门学科的课程数量。该应用程序针对我的大学时间表。想法是我有3个活动:main.java、Sublist.java和editcrap.java。java充当启动屏幕并启动子列表活动 在子列表活动中,用户显示的布局显示(文本视图)(按钮)(计数器文本视图)彼此水平。其中有7个垂直对齐 单击菜单按钮时,会出现:(编辑主题参数),单击该按钮会将用户带到editcrap.java活动,在相应的EditText框中进行用户输入,询问子列表活动中每个对应(TextView)的主题名称和对应(Counter_TextView)的类总数。单击“确定”按钮后,数据将被传递给子列表活动以进行显示和操作 完成这项工作后,我需要一种存储数据的方法,以便下次打开应用程序时,它能够保留以前的字符串和类数值。这就是我遇到强制关闭错误或无数据保留错误的地方。这是我的密码…有人告诉我我做错了什么吗?我已经为此挣扎了好几天:)我基本上需要应用程序维护两个文件,一个包含字符串,另一个包含需要从Sublist.java活动中读取和显示的数字,因为我需要应用程序用户所做的任何更改也反映到原始文件中Android 在内存中存储用户输入数据,android,android-layout,android-emulator,android-manifest,Android,Android Layout,Android Emulator,Android Manifest,我正在尝试创建一个简单的应用程序,它基本上是一个跟踪程序,可以跟踪大学生每门学科的课程数量。该应用程序针对我的大学时间表。想法是我有3个活动:main.java、Sublist.java和editcrap.java。java充当启动屏幕并启动子列表活动 在子列表活动中,用户显示的布局显示(文本视图)(按钮)(计数器文本视图)彼此水平。其中有7个垂直对齐 单击菜单按钮时,会出现:(编辑主题参数),单击该按钮会将用户带到editcrap.java活动,在相应的EditText框中进行用户输入,询问子
//Sublist.java:
package com.shuaib669.bunkrecord;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class Sublist extends Activity{
double[] no_of_classes = new double[7];
int count[]= new int[7];
double cutOff = 0.3;
String[] newText = new String[7];
String[] newNum = new String[7];
String countString = null;
TextView subject[] = new TextView[7];
TextView counter[] = new TextView[7]; //sub11 is counter text view label
Button button[] = new Button[7]; //button1 is the increment button
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Assigning Views to objects.
subject[0] = (TextView) findViewById(R.id.textView1);
counter[0] = (TextView) findViewById(R.id.counter1);
button[0] = (Button) findViewById(R.id.button1);
subject[1] = (TextView) findViewById(R.id.textView2);
counter[1] = (TextView) findViewById(R.id.counter2);
button[1] = (Button) findViewById(R.id.button2);
subject[2] = (TextView) findViewById(R.id.textView3);
counter[2] = (TextView) findViewById(R.id.counter3);
button[2] = (Button) findViewById(R.id.button3);
subject[3] = (TextView) findViewById(R.id.textView4);
counter[3] = (TextView) findViewById(R.id.counter4);
button[3] = (Button) findViewById(R.id.button4);
subject[4] = (TextView) findViewById(R.id.textView5);
counter[4] = (TextView) findViewById(R.id.counter5);
button[4] = (Button) findViewById(R.id.button5);
subject[5] = (TextView) findViewById(R.id.textView6);
counter[5] = (TextView) findViewById(R.id.counter6);
button[5] = (Button) findViewById(R.id.button6);
subject[6] = (TextView) findViewById(R.id.textView7);
counter[6] = (TextView) findViewById(R.id.counter7);
button[6] = (Button) findViewById(R.id.button7);
try {
// open the file for reading
DataInputStream in= new DataInputStream(openFileInput(getFilesDir() + "/" + "subject.txt"));
// if file the available for reading
if (in!= null) {
// prepare the file for reading
String line;
int x=0;
// read every line of the file into the line-variable, on line at the time
while(in.readLine() != null) {
// do something with the strings from the file
line=DataInputStream.readUTF(in);
subject[x].setTextColor(Color.BLACK);
subject[x].setText(line);
x+=1;
}
}
// close the file again
in.close();
}
catch (Exception e) {
e.printStackTrace();// do something if the myfilename.txt does not exits
}
button[0].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(count[0]>=(no_of_classes[0]*cutOff)){
counter[0].setTextColor(Color.RED);
countString = "" +(++count[0]); //Convert from int to String to set in your textview::
counter[0].setText(countString);
}
else{
countString = "" +(++count[0]); //Convert from int to String to set in your textview::
counter[0].setText(countString);
}
}
});
button[1].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(count[1]>=(no_of_classes[1]*cutOff)){
counter[1].setTextColor(Color.RED);
countString = "" +(++count[1]); //Convert from int to String to set in your textview::
counter[1].setText(countString);
}
else{
countString = "" +(++count[1]); //Convert from int to String to set in your textview::
counter[1].setText(countString);
}
}
});
button[2].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(count[2]>=(no_of_classes[2]*cutOff)){
counter[2].setTextColor(Color.RED);
countString = "" +(++count[2]); //Convert from int to String to set in your textview::
counter[2].setText(countString);
}
else{
countString = "" +(++count[2]); //Convert from int to String to set in your textview::
counter[2].setText(countString);
}
}
});
button[3].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(count[3]>=(no_of_classes[3]*cutOff)){
counter[3].setTextColor(Color.RED);
countString = "" +(++count[3]); //Convert from int to String to set in your textview::
counter[3].setText(countString);
}
else{
countString = "" +(++count[3]); //Convert from int to String to set in your textview::
counter[3].setText(countString);
}
}
});
button[4].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(count[4]>=(no_of_classes[4]*cutOff)){
counter[4].setTextColor(Color.RED);
countString = "" +(++count[4]); //Convert from int to String to set in your textview::
counter[4].setText(countString);
}
else{
countString = "" +(++count[4]); //Convert from int to String to set in your textview::
counter[4].setText(countString);
}
}
});
button[5].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(count[5]>=(no_of_classes[5]*cutOff)){
counter[5].setTextColor(Color.RED);
countString = "" +(++count[5]); //Convert from int to String to set in your textview::
counter[5].setText(countString);
}
else{
countString = "" +(++count[5]); //Convert from int to String to set in your textview::
counter[5].setText(countString);
}
}
});
button[6].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(count[6]>=(no_of_classes[6]*cutOff)){
counter[6].setTextColor(Color.RED);
countString = "" +(++count[6]); //Convert from int to String to set in your textview::
counter[6].setText(countString);
}
else{
countString = "" +(++count[6]); //Convert from int to String to set in your textview::
counter[6].setText(countString);
}
}
});
}
public boolean onCreateOptionsMenu(Menu menu){ // What the MENU button does.
super.onCreateOptionsMenu(menu);
MenuInflater castle = getMenuInflater();
castle.inflate(R.menu.main_menu, menu);
return(true);
}
public boolean onOptionsItemSelected(MenuItem item){ // Opens Options of MENU.
switch(item.getItemId()){
case R.id.editcrap: startActivityForResult((new Intent("com.shuaib669.bunkrecord.EDITCRAP")), 1);
return(true);
}
return(false);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 1: if(resultCode==Activity.RESULT_OK){
newText = data.getStringArrayExtra("com.shuaib669.bunkrecord.thetext");
newNum = data.getStringArrayExtra("com.shuaib669.bunkrecord.thenum");
try {
// open myfilename.txt for writing
DataOutputStream out = new DataOutputStream(openFileOutput(getFilesDir() + "/" + "subject.txt", Context.MODE_PRIVATE));
//newNum = data.getIntArrayExtra("com.shuaib669.thenum");
//for loop to setText in the TextViews of main.xml
for(int x=0;x<7;x++){
subject[x].setTextColor(Color.BLACK);
subject[x].setText(newText[x]);
// write the contents on mySettings to the file
out.writeUTF(newText[x]);
try{
no_of_classes[x]=Integer.parseInt(newNum[x]);
}
catch(Exception nfe){
nfe.printStackTrace();
}
// close the file
out.close();
}
}
catch (Exception e) {
Log.i("Data Input Sample", "I/O Error"); //do something if an Exception occurs.
}
}
break;
}
}
}
//Sublist.java:
包com.shuaib669.bunkrecord;
导入java.io.DataInputStream;
导入java.io.DataOutputStream;
导入java.io.IOException;
导入android.app.Activity;
导入android.content.Context;
导入android.content.Intent;
导入android.graphics.Color;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入android.view.Menu;
导入android.view.MenuInflater;
导入android.view.MenuItem;
公共类子列表扩展了活动{
double[]不包含任何类别=新的double[7];
整数计数[]=新整数[7];
双截止=0.3;
String[]newText=新字符串[7];
字符串[]newNum=新字符串[7];
String countString=null;
TextView主题[]=新的TextView[7];
TextView计数器[]=新建TextView[7];//sub11是计数器文本视图标签
按钮按钮[]=新按钮[7];//按钮1是增量按钮
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//将视图指定给对象。
主题[0]=(TextView)findViewById(R.id.textView1);
计数器[0]=(TextView)findViewById(R.id.counter1);
按钮[0]=(按钮)findViewById(R.id.button1);
主题[1]=(TextView)findViewById(R.id.textView2);
计数器[1]=(TextView)findViewById(R.id.counter2);
按钮[1]=(按钮)findViewById(R.id.button2);
主题[2]=(TextView)findViewById(R.id.textView3);
计数器[2]=(TextView)findViewById(R.id.counter3);
按钮[2]=(按钮)findViewById(R.id.button3);
主题[3]=(TextView)findViewById(R.id.textView4);
计数器[3]=(TextView)findViewById(R.id.counter4);
按钮[3]=(按钮)findViewById(R.id.button4);
主题[4]=(TextView)findViewById(R.id.textView5);
计数器[4]=(TextView)findViewById(R.id.counter5);
按钮[4]=(按钮)findViewById(R.id.button5);
主题[5]=(TextView)findViewById(R.id.textView6);
计数器[5]=(TextView)findViewById(R.id.counter6);
按钮[5]=(按钮)findViewById(R.id.button6);
主题[6]=(TextView)findViewById(R.id.textView7);
计数器[6]=(TextView)findViewById(R.id.counter7);
按钮[6]=(按钮)findViewById(R.id.button7);
试一试{
//打开文件进行读取
DataInputStream in=新的DataInputStream(openFileInput(getFileDir()+“/”+“subject.txt”);
//如果文件可供读取,则
if(in!=null){
//准备文件以便阅读
弦线;
int x=0;
//将文件的每一行读取到line变量中,同时在线
while(in.readLine()!=null){
//对文件中的字符串执行一些操作
line=DataInputStream.readUTF(in);
受试者[x].setTextColor(Color.BLACK);
主题[x].setText(行);
x+=1;
}
}
//再次关闭该文件
in.close();
}
捕获(例外e){
e、 printStackTrace();//如果myfilename.txt不存在,请执行某些操作
}
按钮[0]。setOnClickListener(新视图。OnClickListener(){
公共void onClick(视图v){
//TODO自动生成的方法存根
if(计数[0]>=(类的数量[0]*截止)){
计数器[0]。setTextColor(Color.RED);
countString=“”+(++count[0]);//将int转换为字符串以在textview中设置:
计数器[0]。setText(countString);
}
否则{
countString=“”+(++count[0]);//将int转换为字符串以在textview中设置:
计数器[0]。setText(countString);
}
}
});
按钮[1]。setOnClickListener(新视图。OnClickListener(){
公共void onClick(视图v){
//TODO自动生成的方法存根
如果(计数[1]>=(类的数量[1]*截止)){
计数器[1]。setTextColor(Color.RED);
countString=“”+(++count[1]);//在文本视图中将int转换为要设置的字符串::
计数器[1]。setText(countSt
package com.shuaib669.bunkrecord;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class editcrap extends Activity{
EditText sub[] = new EditText[7]; //list of subject text edit labels.
Button parambutton1; //OK buttons for edit list.
EditText num[] = new EditText[7]; //list of objects of total no. of classes bunked edit text labels. (boinkers i know)
String theText[] = new String[7];
String theNum[] = new String[7];
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.params);
sub[0] = (EditText) findViewById(R.id.peditText1); //pedittext is the parameter menu edit text label
num[0] = (EditText) findViewById(R.id.pnumText1); //EditText label for takin in total no. of classes for 1 subject
sub[1] = (EditText) findViewById(R.id.peditText2);
num[1] = (EditText) findViewById(R.id.pnumText2);
sub[2] = (EditText) findViewById(R.id.peditText3);
num[2] = (EditText) findViewById(R.id.pnumText3);
sub[3] = (EditText) findViewById(R.id.peditText4);
num[3] = (EditText) findViewById(R.id.pnumText4);
sub[4] = (EditText) findViewById(R.id.peditText5);
num[4] = (EditText) findViewById(R.id.pnumText5);
sub[5] = (EditText) findViewById(R.id.peditText6);
num[5] = (EditText) findViewById(R.id.pnumText6);
sub[6] = (EditText) findViewById(R.id.peditText7);
num[6] = (EditText) findViewById(R.id.pnumText7);
parambutton1 = (Button) findViewById(R.id.parambutton1); //pbutton1 is the ok button to accept the input.
parambutton1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
for(int x=0;x<7;x++){
theText[x] = sub[x].getText().toString();
theNum[x] = num[x].getText().toString();
//theNum[x] = Integer.parseInt(num[x].getText().toString());
}
Intent data = new Intent(editcrap.this, Sublist.class);
data.putExtra("com.shuaib669.bunkrecord.thetext", theText);
data.putExtra("com.shuaib669.bunkrecord.thenum", theNum);
setResult(Activity.RESULT_OK, data);
finish();
}
});
}
}
public static final String PREFS_NAME = "MyPrefsFile";
private static final String PREF_USERNAME = "username";
private static final String PREF_PASSWORD = "password";
EtUserName=(EditText) findViewById(R.id.EditText01);
EtPassword=(EditText) findViewById(R.id.EditText02);
SharedPreferences pref = getSharedPreferences(PREFS_NAME,MODE_PRIVATE);
String username = pref.getString(PREF_USERNAME, null);
String password = pref.getString(PREF_PASSWORD, null);
EtUserName.setText(username);
EtPassword.setText(password);
String us,pa;
us=EtUserName.getText().toString();
pa=EtPassword.getText().toString();
SharedPreferences settings = getSharedPreferences(PREFS_NAME,MODE_PRIVATE);
getSharedPreferences(PREFS_NAME,MODE_PRIVATE)
.edit()
.putString(PREF_USERNAME, us)
.putString(PREF_PASSWORD, pa)
.commit();