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>

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);
        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 の値が空の場合にアプリを 2 秒間開くと、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

最初は、アプリケーションに SharedPreferences がないためabcPref.getString("tsTRQPO", "")、他の結果はここで指定された空のデフォルト値になります。すべての編集テキストを入力してデータを保存すると、次回から適切なデータが取得されます。

確認のため、SharedPreferences からデータを取得する際にデフォルト値を設定してみてください。たとえばedtTRQPO.setText(abcPref.getString("tsTRQPO", "15"));、最初に値 15 をロードするかどうかを確認します。

于 2013-09-19T07:29:54.693 に答える
0

これは、現在空白を意味する SharedPreferences から OnCreate メソッドで値を取得しようとしているためです。今見てください。アプリを起動すると、最初に OnCreate メソッドが実行され、sharedPreferences から値を取得しようとすると、値を保存するときにの上save6.setOnClickListener

それは何ですか?

注:sharedPreferencesに保存した後に値を取得

于 2013-09-19T07:31:18.427 に答える
0

共有設定はキャッシュに保存されます。IDE からアプリを再起動しても、共有設定は消去されません。クリアしたいならやるべき

  1. アプリをアンインストールする
  2. Seetings > プログラムに移動 > プログラムを検索 > キャッシュをクリアします。

その時だけ、それは空です。したがって、おそらく問題は、エミュレーターに古い値があり、デバイスに新しい値があることです (またはその逆)。

于 2013-09-19T07:02:20.260 に答える