2017-02-07 2 views
0

У меня есть активность настроек с текстовым предпочтением, который сохраняет в общих настройках строку, которая является IP-адресом, тогда у меня есть приемник широковещания, где AsyncTask делает вызов сервис. Я хотел бы сделать настраиваемый адрес URL, но когда я делаю вызов, не принимается текущее значение ip-адреса, но когда я перезапускаю свое приложение, вы получаете правильное значение. Как я могу решить эту проблему. Я вставляю только полезный код. Заранее спасибоBroadcast Receiver не считывает текущее значение в общих предпочтениях

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:

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 не работали правильно в разных процессах! Если вы используете разные процессы, я рекомендую использовать какой-то механизм, который работает с ним (например, IPC, базы данных, ...).

Альтернативная библиотека, которая заменяет SharedPreferences, - Tray. Он использует контент-провайдер/базы данных и имеет аналогичный синтаксис. Вы даже можете импортировать существующие данные из SharedPreferences.

+0

как я писал в своем вопросе, я не сохраняю значение программно, но использую компонент (edittextpreference), который делает это для меня – mike5v

+0

У него все еще есть указанные проблемы - iirc 'EditTextPreference 'использует' apply() '. – dipdipdip

+0

Теперь, когда мы поняли проблему, что может быть решением? – mike5v

 Смежные вопросы

  • Нет связанных вопросов^_^