2017-03-12 13 views
0

私は現在、アプリケーションが初めて開かれたときにセットアップインターフェイスとそれ以降のアプリケーションが開かれたときに、設定インターフェイスを表示するアプリケーションを開発中です。私がこれを達成したのは、アプリケーションが開くと、共有の設定がnullかどうかを確認することです。共有プリファレンスがnullの場合は、アプリケーションが初めて開かれたことを意味し、共有プリファレンスに値を設定します。次にアプリケーションが開かれたときに、共有設定がチェックされると、それはもはやヌルではなく、設定インターフェースに移動します。問題は、私が最初に実行すると、ステータスバーや何もない白い画面しか表示されないことです。以下は共有設定とインテントの使用 - セットアップと設定アプリケーション

private void saveSharedPref() 
{ 
    SharedPreferences preferences = getSharedPreferences(SHARED_PREFERENCES_FILE, 0); 
    SharedPreferences.Editor editor = preferences.edit(); 

    //Save values from Edit Text Controls 
    editor.putString("firstTime", "1234"); 
    editor.commit(); 
} 

private void loadSharedPreferences() 
{ 
    SharedPreferences preferences = getSharedPreferences(SHARED_PREFERENCES_FILE, 0); 

    //Null check in case file does not exist 
    if(preferences != null) { 
     String checkFirst = preferences.getString("firstTime", ""); 
     if (!checkFirst.equalsIgnoreCase("1234")) 
     { 
      Intent sendToSetup = new Intent (this, Setup.class); 
      startActivity(sendToSetup); 
     } 
     else 
     { 
      saveSharedPref(); 
     } 
    } 
} 

私はloadSharedPreferences()を呼び出し、私onCreateMethodユーザーが初めてそれを開いたときにアプリがリダイレクトされる場所です

public class Setup extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.setup_pg1); 
} 

に自分のアプリケーションのコードスニペットです。

ご協力いただければ幸いです。前もって感謝します! P.P.申し訳ありませんが私の英語イマイチ良い

EDIT場合: はここandroidmanifest

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/icon1" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <activity 
     android:name=".SafeSwipe" 
     android:label="SafeSwipe-UI v.2" 
     android:theme="@style/AppTheme.NoActionBar"> 
    </activity> 
    <activity 
     android:name=".MainActivity" 
     android:label="" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".Setup" /> 
</application> 

setup_pg1

<TextView 
    android:text="Setup" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="102dp" 
    android:id="@+id/textView" /> 

<Button 
    android:text="Continue" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/textView" 
    android:layout_alignRight="@+id/textView" 
    android:layout_alignEnd="@+id/textView" 
    android:layout_marginTop="71dp" 
    android:id="@+id/button7" /> 

セットアップファイルです

public class Setup extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.setup_pg1); 
} 

}

+0

詳細を表示する必要があります。可能であれば、あなたのアンドロイドマニフェストを投稿してください。R.layout.setup_pg1 – user3331142

+0

@ user3331142質問を編集しました –

+0

'getSharedPreferences'は途中で' null'を返すことはできません。常に有効なオブジェクトを返します。ただし、空にすることはできます。 –

答えて

0

まず、if(preferences != null)は真ではありません...ここにあなたのコードだ

public class Setup extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.setup_pg1); 
    } 
} 

もう一度お試しください。しかし、ランダムな文字列ではなくブール値を使用します。

public class MainActivity extends AppCompatActivity { 

    public static final String PREFS_NAME = "MyPrefsFile"; 
    public static final String KEY_FIRST_TIME = "firstTime"; 

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

     SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
     boolean firstTime = prefs.getBoolean(KEY_FIRST_TIME, false); 

     if (!firstTime) { 
      SharedPreferences.Editor editor = prefs.edit(); 
      editor.putBoolean(KEY_FIRST_TIME, true); 
      editor.commit();  
     } else { 
      Intent sendToSetup = new Intent (this, Setup.class); 
      startActivity(sendToSetup); 
      finish(); 
     } 
    } 
} 
+0

あなたの返信ありがとう! settings.edit();エラーが発生しています。私はこの行が何であるか把握しているようです –

+0

'prefs.edit()'、私の悪い –

+0

このコードは私のために働いたものです。どうもありがとうございます –

0

あなたif(preferences != null)が原因の好みがnullではない、ここで働いていません。それはちょうど空の好みです。あなたは以下のコードを試してみることができます:

private void loadSharedPreferences() 
{ 
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
    String checkFirst = preferences.getString("firstTime", ""); 
    if(!checkFirst.equals("")) {   
     Intent sendToSetup = new Intent (this, Setup.class); 
     startActivity(sendToSetup); 
    } 
    else 
    { 
     saveSharedPref(); 
    } 
} 

saveSharedPref()方法:セットアップ活動のonCreate()

private void saveSharedPref() 
{ 
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

    //Save values from Edit Text Controls 
    preferences.edit().putString("firstTime", "1234").apply(); 

} 

コールloadSharedPreferences():このことができます

希望。

+0

こんにちは!まだ白い空白の画面が表示されます。思考? –

+0

loadSharedPreferences()をどこで呼び出していますか?セットアップXMLコードを表示してください。 – tahsinRupam

+0

質問を編集 –

0

はこのお試しください! 代わり嗜好をチェックするのを= nullで、これを試してください。..

if (preferences.getString("firstTime","").equals("1234")) 
{ 
    Intent sendToSetup = new Intent (this, Setup.class); 
    startActivity(sendToSetup); 
} 
else 
    saveSharedPref(); 
+0

このコードを試してみると、致命的なエラーが発生しました。 –

+0

設定オブジェクトを初期化しましたか?私は環境設定= getSharedPreferences(FileName、Mode)を意味します –

0

私はこのコードで任意の重大な問題が表示されません。しかし、あなたのプログラムをテストしている間にすでにsaveSharedPref()メソッドを呼び出していて、firstTimeの値がすでに存在しているという前提があります。プログラムを再コンパイルした後にSharedPreferencesが削除されないため、次の文が使用されます。

if (!checkFirst.equalsIgnoreCase("1234")) 

falseを返します。 これを確認する最も良い方法は、loadSharedPreferences()メソッドにブレークポイントを設定して確認することです。 sharedPreferences(回答https://stackoverflow.com/a/3687333/7677939を参照)

を削除するか、別のファイル名をSHARED_PREFERENCES_FILE変数に指定してください。

また、loadSharedPreferences()と呼ばれる場所で問題が発生する可能性がありますが、あなたのソースには表示されません。

更新: お知らせ、あなたがloadSharedPreferences()活動Setupに、あなたは自分のメインの活動でそれを呼び出す必要があります呼び出してはならないこと!いいえ、あなたがいないあなたはいつも私が私のonCreateメソッド

でloadSharedPreferences()を呼び出しgetSharedPreferences()

からnull以外の値を取得していないだろうから

関連する問題