0

我有一个奇怪的问题,我EditText在 xml 中有几个框,我给了它们默认值。我也在使用共享首选项,其中我保存用户输入的值。

问题是在模拟器中EditText工作正常但在真实的物理设备上值是空的,我错过了什么吗???

  <EditText
       android:id="@+id/etTRQPO"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:ems="10"
       android:inputType="numberDecimal"
       android:singleLine="true"
       android:text="15">
  </EditText>

爪哇代码

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Getacc extends Activity {
    Button save6;

    EditText edtTRQPO, edtTRQGE, edtTRQFW, edtTRQGR, edtTRQBN, edtTRQLT,
            edtTRQPP, edtTRQCG;
    int tV, tW, tX, counterAC;
    String tsTRQPO, tsTRQGE, tsTRQFW, tsTRQGR, tsTRQBN, tsTRQLT, tsTRQPP,
            tsTRQCG;
    public static String FILE1 = "MyPrefsFile";
    SharedPreferences abcPref;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.getacc);
        save6 = (Button) findViewById(R.id.btGoresult);
        edtTRQPO = (EditText) findViewById(R.id.etTRQPO);
        edtTRQGE = (EditText) findViewById(R.id.etTRQGE);
        edtTRQFW = (EditText) findViewById(R.id.etTRQFW);
        edtTRQGR = (EditText) findViewById(R.id.etTRQGR);
        edtTRQBN = (EditText) findViewById(R.id.etTRQBN);
        edtTRQLT = (EditText) findViewById(R.id.etTRQLT);
        edtTRQPP = (EditText) findViewById(R.id.etTRQPP);
        edtTRQCG = (EditText) findViewById(R.id.etTRQCG);

        abcPref = getSharedPreferences(FILE1, 0);
        edtTRQPO.setText(abcPref.getString("tsTRQPO", ""));
        edtTRQGE.setText(abcPref.getString("tsTRQGE", ""));
        edtTRQFW.setText(abcPref.getString("tsTRQFW", ""));
        edtTRQGR.setText(abcPref.getString("tsTRQGR", ""));
        edtTRQBN.setText(abcPref.getString("tsTRQBN", ""));
        edtTRQLT.setText(abcPref.getString("tsTRQLT", ""));
        edtTRQPP.setText(abcPref.getString("tsTRQPP", ""));
        edtTRQCG.setText(abcPref.getString("tsTRQCG", ""));

        save6.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if ((!edtTRQPO.getText().toString().equals(""))
                        && (!edtTRQGE.getText().toString().equals(""))
                        && (!edtTRQFW.getText().toString().equals(""))
                        && (!edtTRQGR.getText().toString().equals(""))
                        && (!edtTRQBN.getText().toString().equals(""))
                        && (!edtTRQLT.getText().toString().equals(""))
                        && (!edtTRQPP.getText().toString().equals(""))
                        && (!edtTRQCG.getText().toString().equals(""))) {
                    // TODO Auto-generated method stub
                    counterAC =1;
                    abcPref = getSharedPreferences(FILE1, 0);
                    SharedPreferences.Editor editor = abcPref.edit();
                    editor.putString("tsTRQPO", edtTRQPO.getText().toString());
                    editor.putString("tsTRQGE", edtTRQGE.getText().toString());
                    editor.putString("tsTRQFW", edtTRQFW.getText().toString());
                    editor.putString("tsTRQGR", edtTRQGR.getText().toString());
                    editor.putString("tsTRQBN", edtTRQBN.getText().toString());
                    editor.putString("tsTRQLT", edtTRQLT.getText().toString());
                    editor.putString("tsTRQPP", edtTRQPP.getText().toString());
                    editor.putString("tsTRQCG", edtTRQCG.getText().toString());
                    editor.putInt("counterac", counterAC);
                    editor.commit();
                    Toast message = Toast.makeText(Getacc.this,
                            "Values are saved", 2000);
                    message.setGravity(Gravity.BOTTOM, 0, 0);
                    message.show();
                    Intent opentime = new Intent("com.sports.sport.TIME");
                    startActivity(opentime);
                    onPause();
                } else {
                    Toast failz = Toast.makeText(Getacc.this,
                            "Values are not Entered", 2000);
                    failz.setGravity(Gravity.BOTTOM, 0, 0);
                    failz.show();
                }
            };
        });

    }
}
4

4 回答 4

1

第一次在真实设备上运行应用程序时,它将显示默认值,而不是 SharedPreferences 中的值,因为 SharedPreferences 中的值是空的。如果 SharedPreferences 有空值,当您第二次打开应用程序时,EditText 将显示 SharedPreferences 中的空值。您需要应用一些值检查,例如

 if(user_entered_values_in_edittext){
    //Store values in SharedPreferences otherwise not.
 }

 // On app resume - inside onResume() or onCreate()
 if(SharedPreferences have empty value or no value){
    //Show your EditText default value that you have defined in xml file.
 }

更正了 Getacc.java 文件...

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Getacc extends Activity {
   Button save6;

   EditText edtTRQPO, edtTRQGE, edtTRQFW, edtTRQGR, edtTRQBN, edtTRQLT,
        edtTRQPP, edtTRQCG;
   int tV, tW, tX, counterAC;
   String tsTRQPO, tsTRQGE, tsTRQFW, tsTRQGR, tsTRQBN, tsTRQLT, tsTRQPP,
        tsTRQCG;
   public static String FILE1 = "MyPrefsFile";
   SharedPreferences abcPref;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.getacc);
    save6 = (Button) findViewById(R.id.btGoresult);
    edtTRQPO = (EditText) findViewById(R.id.etTRQPO);
    edtTRQGE = (EditText) findViewById(R.id.etTRQGE);
    edtTRQFW = (EditText) findViewById(R.id.etTRQFW);
    edtTRQGR = (EditText) findViewById(R.id.etTRQGR);
    edtTRQBN = (EditText) findViewById(R.id.etTRQBN);
    edtTRQLT = (EditText) findViewById(R.id.etTRQLT);
    edtTRQPP = (EditText) findViewById(R.id.etTRQPP);
    edtTRQCG = (EditText) findViewById(R.id.etTRQCG);

    abcPref = getSharedPreferences(FILE1, 0);

    // First get All values stored in SharedPreferences 
      tsTRQPO = abcPref.getString("tsTRQGE", null);
      tsTRQGE = abcPref.getString("tsTRQGE", null);
      tsTRQFW = abcPref.getString("tsTRQFW", null);
      tsTRQGR = abcPref.getString("tsTRQGR", null);
      tsTRQBN = abcPref.getString("tsTRQBN", null);
      tsTRQLT = abcPref.getString("tsTRQLT", null);
      tsTRQPP = abcPref.getString("tsTRQPP", null);
      tsTRQCG = abcPref.getString("tsTRQCG", null);

      // Check if values are not null
      if(tsTRQPO != null && tsTRQGE != null && tsTRQFW != null && tsTRQGR!= null && tsTRQBN != null && tsTRQLT != null && tsTRQPP != null && tsTRQCG != null){
          edtTRQPO.setText(tsTRQPO);
          edtTRQGE.setText(tsTRQGE);
          edtTRQFW.setText(tsTRQFW);
          edtTRQGR.setText(tsTRQGR);
          edtTRQBN.setText(tsTRQBN);
          edtTRQLT.setText(tsTRQLT);
          edtTRQPP.setText(tsTRQPP);
          edtTRQCG.setText(tsTRQCG);

      }else{
        //Do nothing.. EditText will show Default values defined in xml file
      }

    save6.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if ((!edtTRQPO.getText().toString().equals(""))
                    && (!edtTRQGE.getText().toString().equals(""))
                    && (!edtTRQFW.getText().toString().equals(""))
                    && (!edtTRQGR.getText().toString().equals(""))
                    && (!edtTRQBN.getText().toString().equals(""))
                    && (!edtTRQLT.getText().toString().equals(""))
                    && (!edtTRQPP.getText().toString().equals(""))
                    && (!edtTRQCG.getText().toString().equals(""))) {
                // TODO Auto-generated method stub
                counterAC =1;
                abcPref = getSharedPreferences(FILE1, 0);
                SharedPreferences.Editor editor = abcPref.edit();
                editor.putString("tsTRQPO", edtTRQPO.getText().toString());
                editor.putString("tsTRQGE", edtTRQGE.getText().toString());
                editor.putString("tsTRQFW", edtTRQFW.getText().toString());
                editor.putString("tsTRQGR", edtTRQGR.getText().toString());
                editor.putString("tsTRQBN", edtTRQBN.getText().toString());
                editor.putString("tsTRQLT", edtTRQLT.getText().toString());
                editor.putString("tsTRQPP", edtTRQPP.getText().toString());
                editor.putString("tsTRQCG", edtTRQCG.getText().toString());
                editor.putInt("counterac", counterAC);
                editor.commit();
                Toast message = Toast.makeText(Getacc.this,
                        "Values are saved", 2000);
                message.setGravity(Gravity.BOTTOM, 0, 0);
                message.show();
                Intent opentime = new Intent("com.sports.sport.TIME");
                startActivity(opentime);
                onPause();
            } else {
                Toast failz = Toast.makeText(Getacc.this,
                        "Values are not Entered", 2000);
                failz.setGravity(Gravity.BOTTOM, 0, 0);
                failz.show();
            }
        };
    });
  }
}
于 2013-09-19T07:13:26.963 回答
0

共享首选项保存在缓存中。如果您从 IDE 重新启动您的应用程序,则不会清除共享首选项。如果你想清除它,你应该

  1. 卸载应用
  2. 转到设置>程序>找到您的程序>清除缓存。

只有这样它是空的。所以也许你的问题是你在模拟器上有旧值,而在设备上它是新值(反之亦然)

于 2013-09-19T07:02:20.260 回答
0

第一次,应用程序中没有 SharedPreferences,所以abcPref.getString("tsTRQPO", "")其他的会导致这里给出的默认值是空的。通过填写所有编辑文本保存数据后,您将从下一次得到正确的数据。

为了检查,在从 SharedPreferences 获取数据时尝试设置一些默认值。例如edtTRQPO.setText(abcPref.getString("tsTRQPO", "15"));,检查它是否第一次加载值 15。

于 2013-09-19T07:29:54.693 回答
0

这是因为您试图从 SharedPreferences 中获取 OnCreate 方法中的值,该方法当前为空表示 null,现在看,当您启动应用程序时,它将首先执行 OnCreate 方法,您尝试从 sharedPreferences 中获取值,当您保存值时在save6.setOnClickListener

它是什么?

注意:在 sharedPreferences 中保存后获取值

于 2013-09-19T07:31:18.427 回答