如何从不同的方法访问保存的数据?

时间:2015-01-11 23:39:30

标签: java android string methods save

我正在尝试将值保存为设备内部存储器中的字符串,以便在关闭应用程序并通过单击其他按钮重新打开时可以访问该值。当我运行程序时,我输入输入A和B的值,我知道它通过计算处理它们,因为我修改了它,以便在计算后立即显示答案。 但是在这个版本上,如果我单击“保存”按钮,然后单击“访问”按钮以显示答案和标记为“上一个答案”的文本视图,它只显示“xx”,这是我正在尝试保存的字符串的初始值。因此要么它不存储包含答案的更新版本,要么Access按钮只能访问字符串的原始值。

    Button jSave = (Button) findViewById(R.id.iSave);
    Button jAccess = (Button) findViewById(R.id.iAccess);



    final String saveName="Name";
    final String saveValue = "xx";




    jSave.setOnClickListener(
            new Button.OnClickListener(){
                public void onClick(View v){


                //Calculations. These are a part of a more complex series of 
                //calculations between several classes, but I've simplified it
                //somewhat for this post.
                EditText jInputA = (EditText)findViewById(R.id.iInputA);
                double dInputA = Double.parseDouble(jInputA.getText().toString());
                EditText jInputB = (EditText)findViewById(R.id.iInputB);
                double dInputB = Double.parseDouble(jInputB.getText().toString());
                double myAnswer = Double.parseDouble(ProfileCalculations.functionQ(jInputA, jInputB));


                //Update the value of saveValue to match that of myAnswer
                final String saveValue = "The answer is " myAnswer;


                //Save saveValue as a string under file saveName
                try{
                  FileOutputStream jFOS = openFileOutput(saveName, Context.MODE_PRIVATE);
                  jFOS.write(saveValue.getBytes());
                  jFOS.close();

                } catch (FileNotFoundException ex) {
                  Logger.getLogger(Profile.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                  Logger.getLogger(Profile.class.getName()).log(Level.SEVERE, null, ex);
                }



                }
            }

    );



    jAccess.setOnClickListener(
            new Button.OnClickListener() {
                public void onClick(View v) {
                   try {
                       FileInputStream jFIS = openFileInput(saveName);
                       jFIS.read(saveValue.getBytes());
                       jFIS.close();
                   } catch (FileNotFoundException ex) {
                       Logger.getLogger(Profile.class.getName()).log(Level.SEVERE, null, ex);
                   } catch (IOException ex) {
                       Logger.getLogger(Profile.class.getName()).log(Level.SEVERE, null, ex);
                   }

                    TextView jPreviousAns = (TextView) findViewById(R.id.iPreviousAns);
                    jPreviousAns.setText(saveValue + "");
                }
            }

    );

2 个答案:

答案 0 :(得分:0)

共享偏好怎么样?这是一个例子。

private SharedPreferences defaultPrefs;
defaultPrefs = PreferenceManager.getDefaultSharedPreferences(this);

String url = "http://www.example.com";
SharedPreferences.Editor ed = defaultPrefs.edit();
ed.putString("homepage", url);
ed.commit();

后来:

String url = defaultPrefs.getString("homepage", "http://www.example.com/some_default_page");

答案 1 :(得分:0)

Android提供了几种保存持久性应用程序数据的选项。您选择的解决方案取决于您的特定需求,例如数据是应该是您的应用程序专用还是其他应用程序(和用户)可访问的数据以及数据所需的空间大小。

您的数据存储选项如下:

共享偏好设置 将私有原始数据存储在键值对中。

内部存储 将私有数据存储在设备内存中。

外部存储空间 将公共数据存储在共享外部存储上。

SQLite数据库 将结构化数据存储在私有数据库中。

网络连接 使用您自己的网络服务器将数据存储在Web上。

对于您给定的应用程序,我认为共享首选项内部存储将是您的选择。

内部存储:使用此路由,您必须调用 openFileOutput()来启动 FileOutputStream ,并从那里使用 write()将数据写入文件, close()关闭 FileOutputStream

例如:

String FILENAME = "hello_file";
String string = "hello world!";

//Initiate
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);

//Write to file
fos.write(string.getBytes());

//Close file
fos.close();

共享首选项:如果您要使用此功能,则必须调用 edit()以获取 SharedPrefrencesEditor ,然后添加对此值,您只需使用 putBoolean() putString()等。一旦完成,您使用 commit()提交数据

例如:

//Initiate Shared Preferences
SharedPreferences.Editor editor = settings.edit();

//Writes data
editor.putBoolean("silentMode", mSilentMode);

// Commit the edits!
editor.commit();

(Source)