2017-02-07 7 views
0

私は、共有プリファレンスでIPアドレスである文字列を保存する編集テキストプリファレンスを持つ設定アクティビティを持っています。次に、AsyncTaskがコールするブロードキャストレシーバを持っていますサービス。私はカスタマイズ可能なURLのアドレスを作りたいと思いますが、私はIPアドレスの現在の値を取っていない呼び出しを行うが、私は私のアプリを再起動するときに適切な値を取る。どうすればこの問題を解決できますか?私は便利なコードだけを貼り付けます。事前に おかげブロードキャストレシーバは共有プリファレンスで現在の値を読み込みません

public class Broadcast extends BroadcastReceiver { 


@Override 
public void onReceive(final Context context, Intent intent) { 

    preferences = PreferenceManager.getDefaultSharedPreferences(context); 

     new Call().execute(); 

} 



private class Call extends AsyncTask<String, String, String> { 

    String ip; 

    @Override 
    protected String doInBackground(String... params) { 

      ip = preferences.getString("key",""); 


     String result = RestFullConnection.postCall("http://" + ip + ":8080/app/api/bla/sync", params[0]); 
     return result; 

    } 

} 

+++ +++編集 私はMainActivityで放送呼び出すと、私はEditTextPreferenceを使用してSPに値を保存します。

Intent alarmIntent = new Intent(getApplicationContext(), Broadcast.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis() + 5000, 30 * 1000, pendingIntent); 
+0

どこでブロードキャストがトリガーされますか?そしてipを保存したコードを投稿してください。 –

+0

私は自分の質問を編集します。 – mike5v

答えて

0

onReceive

でこれを試してみてください
preferenze = context.getSharedPreferences(PERFERENCE_NAME, 
      Context.MODE_PRIVATE); 

ご希望の場合はお手数ですが、

+0

私は試しましたが、何も変更されていません:( – mike5v

0

どのようにSharedPreferencesを保存するかによって異なります。 apply()メソッドを使用すると、現在のスレッドをブロックしないように値が非同期で保存されます。一方、commit()はすぐに値を保存します。このあなたの場合に問題があります(あなたのSharedPreferencesを保存するコードを入力してください)。

異なるプロセス間でSharedPreferencesが正しく動作しないように注意してください。異なるプロセスを使用している場合は、そのプロセスと連携するメカニズム(IPC、データベースなど)を使用することをおすすめします。

SharedPreferencesに代わる代替ライブラリはTrayです。それはコンテンツプロバイダ/データベースを使用し、同様の構文を有する。 SharedPreferencesから既存のデータをインポートすることもできます。

+0

私は私の質問に書いたように、プログラムで値を保存しませんが、私のためにそれを行うコンポーネント(edittextpreference)を使用してください – mike5v

+0

それはまだ述べられている問題があります - iirc 'EditTextPreference 'apply()'を使用します。 – dipdipdip

+0

問題を理解したので、解決策は何ですか? – mike5v

関連する問題