Хранение введенных пользователем данных во внутренней памяти - PullRequest
0 голосов
/ 16 августа 2011

Я пытаюсь создать простое приложение, которое в основном представляет собой трекер, который отслеживает нет. занятий по каждому предмету для студента колледжа. Приложение относится к моему расписанию колледжа. Идея состоит в том, что у меня есть 3 действия: main.java, Sublist.java и editcrap.java. Main.java действует как заставка и запускает действие Sublist.

В действии подсписка пользователь отображается с макетом, отображающим (TextView) (кнопка) (Counter_TextView) горизонтально относительно друг друга. Есть 7 из них выровнены по вертикали.

Когда нажата кнопка меню: появляется (Edit Subject Parameters), который при нажатии приводит пользователя к операции editcrap.java, где пользовательский ввод берется в соответствующие поля EditText с запросом имени субъекта для каждого соответствующего (TextView) и всего количество классов, соответствующих (Counter_TextView) в действии Sublist. При нажатии на кнопку ОК данные передаются в виде активности подсписка для отображения и манипулирования.

Сделав это, мне нужен был способ хранения данных, чтобы при следующем запуске приложения оно сохраняло свою предыдущую строку, и нет. значений классов. Это где я сталкиваюсь с принудительным закрытием ошибок или без сохранения ошибки данных. Вот мой код ... кто-то, пожалуйста, скажите мне, что ты делаешь неправильно? Я боролся с этим в течение нескольких дней :) Мне в основном нужно, чтобы приложение поддерживало 2 файла, один из которых содержит строки и другие числа, которые необходимо прочитать и отобразить в действии Sublist.java, так как нам нужны какие-либо изменения, внесенные приложением Пользователь также будет отражен в исходных файлах

//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;
}                                             


}
  } 

// editcrap.java:

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

        }
    });


}




}

1 Ответ

2 голосов
/ 01 сентября 2011

Использование общих настроек

public static final String PREFS_NAME = "MyPrefsFile";
private static final String PREF_USERNAME = "username";
private static final String PREF_PASSWORD = "password";

следующий код в методе onCreate ()

EtUserName=(EditText) findViewById(R.id.EditText01);
EtPassword=(EditText) findViewById(R.id.EditText02);

здесь вы получаете значение Preferences в editText ... (если у вас есть предыдущие настройки сохранения)

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

для получения дополнительной информации нажмите здесь здесь

...