Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用共享首选项在EditText中保存数字_Java_Android_Memory_Sharedpreferences_Calculator - Fatal编程技术网

Java 使用共享首选项在EditText中保存数字

Java 使用共享首选项在EditText中保存数字,java,android,memory,sharedpreferences,calculator,Java,Android,Memory,Sharedpreferences,Calculator,我是android编程新手,我创建了一个简单的计算器。我希望用户能够暂停应用程序,而不会丢失在两个编辑文本框中输入的数字。我正在尝试使用共享首选项,但由于某些原因,我的应用程序不断崩溃。我怎样才能解决这个问题 package com.example.simplecalculator; import android.os.Bundle; import android.app.Activity; import android.content.SharedPreferences; import

我是android编程新手,我创建了一个简单的计算器。我希望用户能够暂停应用程序,而不会丢失在两个编辑文本框中输入的数字。我正在尝试使用共享首选项,但由于某些原因,我的应用程序不断崩溃。我怎样才能解决这个问题

package com.example.simplecalculator;

import android.os.Bundle;


import android.app.Activity;
import android.content.SharedPreferences;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import com.example.simplecalculator.*;


public class MainActivity extends Activity {

SharedPreferences mySharedPreferences;
SharedPreferences.Editor editor;
public static final String MYPREFERENCES = "MyPreferences_001";
float answer;
final EditText numberone = (EditText)findViewById(R.id.number1);
final EditText numbertwo = (EditText)findViewById(R.id.number2);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mySharedPreferences = getSharedPreferences(MYPREFERENCES, 0);
    String number1 = mySharedPreferences.getString("number1", null);
    String number2 = mySharedPreferences.getString("number2", null);
    numberone.setText(number1); 
    numbertwo.setText(number2);



}

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

public void Addition(View view) {

answer = Float.parseFloat(numberone.getText().toString()) + Float.parseFloat(numbertwo.getText().toString());;

TextView value = (TextView)findViewById(R.id.answer);
value.setText("Your sum is " + answer);


}

public void Subtraction(View view) {

answer = Float.parseFloat(numberone.getText().toString()) - Float.parseFloat(numbertwo.getText().toString());;

TextView value = (TextView)findViewById(R.id.answer);
value.setText("Your difference is " + answer);

}


public void Multiplication(View view) {
    answer = Float.parseFloat(numberone.getText().toString()) * Float.parseFloat(numbertwo.getText().toString());;

TextView value = (TextView)findViewById(R.id.answer);
value.setText("Your product is " + answer);

}

public void Division(View view) {

    answer = Float.parseFloat(numberone.getText().toString()) / Float.parseFloat(numbertwo.getText().toString());;

TextView value = (TextView)findViewById(R.id.answer);
value.setText("Your quotient is " + answer);

}

public void Power(View view) {
    answer = (float) Math.pow(Float.parseFloat(numberone.getText().toString()), Float.parseFloat(numbertwo.getText().toString()));

TextView value = (TextView)findViewById(R.id.answer);
value.setText("Your answer is " + answer);

}

public void Root(View view) {

    answer = (float) Math.sqrt(Float.parseFloat(numberone.getText().toString()));

TextView value = (TextView)findViewById(R.id.answer);
value.setText("Your answer is " + answer);

}


public void onPause(){

    mySharedPreferences = getSharedPreferences(MYPREFERENCES, Activity.MODE_PRIVATE);
    editor = mySharedPreferences.edit();
    editor.putString("number1", numberone.getText().toString());
    editor.putString("number2", numbertwo.getText().toString());
    editor.commit();

}

}

您的应用程序正在崩溃,因为您试图在为活动设置任何布局之前初始化视图。现在,按如下方式初始化…您的问题将得到解决

EditText numberone;
EditText numbertwo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    numberone = (EditText)findViewById(R.id.number1);
    numbertwo = (EditText)findViewById(R.id.number2);

}

您的应用程序正在崩溃,因为您试图在为活动设置任何布局之前初始化视图。现在,按如下方式初始化…您的问题将得到解决

EditText numberone;
EditText numbertwo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    numberone = (EditText)findViewById(R.id.number1);
    numbertwo = (EditText)findViewById(R.id.number2);

}
试试这个

您必须在
onCreate
之前初始化您的
EditText
,然后在
onCreate
中执行该操作

float answer;
final EditText numberone;
final EditText numbertwo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

         numberone = (EditText)findViewById(R.id.number1);
         numbertwo = (EditText)findViewById(R.id.number2);
试试这个

您必须在
onCreate
之前初始化您的
EditText
,然后在
onCreate
中执行该操作

float answer;
final EditText numberone;
final EditText numbertwo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

         numberone = (EditText)findViewById(R.id.number1);
         numbertwo = (EditText)findViewById(R.id.number2);
将其放在onCreate()内,在
setContentView()之后

而且, 当SharedRef中没有存储任何内容时,第一次会发生什么

String number1 = mySharedPreferences.getString("number1", null);
    String number2 = mySharedPreferences.getString("number2", null);  
然后返回一些值,而不是“null”

如果经常在计算器应用程序中使用SharedRef,我建议为get和put SharedRef创建一个函数。
比如:

public static void saveDataToPreferences(String key,
            String value) {
        SharedPreferences prefs = context.getSharedPreferences("your package name",
                Context.MODE_PRIVATE);
        Editor editor = prefs.edit();
        editor.putString(key, value);
        editor.commit();
    }
    public static String getDataFromPreferences(String key) {

        SharedPreferences prefs = context.getSharedPreferences("your package name",
                Context.MODE_PRIVATE);
        return prefs.getString(key, Constants.BLANK);
    }
如果函数在活动中,则可以全局声明该活动的上下文。否则,请在参数中传递

将其放在onCreate()内,在
setContentView()之后

而且, 当SharedRef中没有存储任何内容时,第一次会发生什么

String number1 = mySharedPreferences.getString("number1", null);
    String number2 = mySharedPreferences.getString("number2", null);  
然后返回一些值,而不是“null”

如果经常在计算器应用程序中使用SharedRef,我建议为get和put SharedRef创建一个函数。
比如:

public static void saveDataToPreferences(String key,
            String value) {
        SharedPreferences prefs = context.getSharedPreferences("your package name",
                Context.MODE_PRIVATE);
        Editor editor = prefs.edit();
        editor.putString(key, value);
        editor.commit();
    }
    public static String getDataFromPreferences(String key) {

        SharedPreferences prefs = context.getSharedPreferences("your package name",
                Context.MODE_PRIVATE);
        return prefs.getString(key, Constants.BLANK);
    }

如果函数在活动中,则可以全局声明该活动的上下文。否则,请在参数中传递它。

您很可能会遇到空指针异常。这是因为最初当应用程序SharedReferences没有任何内容时,您倾向于访问它并从中获取一个值,当它不存在时,您将字符串值设置为NULL。当您试图在屏幕上显示空值时,它会崩溃。 这样做:


您很可能遇到空指针异常。这是因为最初当应用程序SharedReferences没有任何内容时,您倾向于访问它并从中获取一个值,当它不存在时,您将字符串值设置为NULL。当您试图在屏幕上显示空值时,它会崩溃。 这样做:

我认为你需要使用和来达到这个目的

当活动被
强制终止时,会使用此选项。由于正常的应用程序行为,活动被销毁,例如用户按下后退按钮,或者您的活动通过调用finish()
操作系统发出自己的销毁信号(例如:当您的活动在后台,另一个任务需要资源时)
。发生这种情况时,将调用onSaveInstanceState(Bundle outstate),由您的应用程序添加要保存在outstate中的任何状态数据

当用户恢复您的活动时,将调用onCreate(Bundle savedInstanceState),如果您的活动在上述场景中终止,则savedInstanceState将不为null。然后,你的应用程序可以从savedInstanceState获取数据,并将你的活动状态重新生成为用户上次看到它时的状态

基本上在onCreate中,当savedInstanceState为null时,这意味着这是活动的“新”启动。当它为非空时(如果应用程序将数据保存在onSaveInstanceState(…),则表示需要重新创建活动状态

有关它的详细信息要多得多

我认为您需要为此使用和

当活动被
强制终止时使用此选项。由于正常的应用程序行为,活动被销毁,例如用户按下后退按钮,或者您的活动通过调用finish()
操作系统发出自己的销毁信号(例如:当您的活动在后台,另一个任务需要资源时)
。发生这种情况时,将调用onSaveInstanceState(Bundle outstate),并由应用程序添加要保存在outstate中的任何状态数据

当用户恢复您的活动时,将调用onCreate(Bundle savedInstanceState),如果您的活动在上述场景中终止,则savedInstanceState将不为空。然后,您的应用程序可以从savedInstanceState获取数据,并将活动的状态重新生成为用户上次看到它时的状态

基本上在onCreate中,当savedInstanceState为null时,表示这是“新”启动的活动。当它为非null时(如果应用程序将数据保存在onSaveInstanceState(…),则表示需要重新创建活动状态


是关于它的更多细节

您可能会遇到NumberFormatException。这是什么?我如何修复它?再次抱歉,我是新手。您可能会遇到NumberFormatException。这是什么?我如何修复它?再次抱歉,我是新手。