2017-08-09 51 views
0

这是我的第一个Android应用我试图更新reciever侧sharedpreferences下面的代码中实时对mainactivity.java实时更新接收方的共享偏好?

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     disp =(TextView) findViewById(R.id.textView2); 
     sharedPreferences = getSharedPreferences(MyPREFERENCES,Context.MODE_PRIVATE); 
     String host = sharedPreferences.getString(hostip,""); 

     String clientId = MqttClient.generateClientId(); 
     client = new MqttAndroidClient(this.getApplicationContext(),"tcp://"+host,clientId); 

     try { 
      IMqttToken token = client.connect(); 
      token.setActionCallback(new IMqttActionListener() { 
       @Override 
       public void onSuccess(IMqttToken asyncActionToken) { 
        Toast.makeText(MainActivity.this,"Connected",Toast.LENGTH_LONG).show(); 
       } 
       @Override 
       public void onFailure(IMqttToken asyncActionToken, Throwable exception) { 
        Toast.makeText(MainActivity.this,"Connection failed",Toast.LENGTH_LONG).show(); 
       } 
      }); 
     } catch (MqttException e) { 
      e.printStackTrace(); 
     } 
} 

settings.java这是发送方

SharedPreferences sharedpreferences; 
    public static final String MyPREFERENCES = "MyPrefs" ; 
    public static final String hostip = "hostipkey" ; 
    public static final String topic = "topickey" ; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_settings); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     editText1 = (EditText) findViewById(R.id.ipadd); 
     editText2 = (EditText) findViewById(R.id.api); 
     sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 

     submit=(Button)findViewById(R.id.submit); 



     submit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String host = editText1.getText().toString(); 
       String api = editText2.getText().toString(); 
       SharedPreferences.Editor editor = sharedpreferences.edit(); 
       editor.putString(hostip, host); 
       editor.putString(topic, api); 
       editor.apply(); 
       Toast.makeText(settings.this,"Done",Toast.LENGTH_LONG).show(); 
      } 
     }); 

    } 

上面的代码工作正常,但我面临的问题是我的数据在共享首选项不实时更新接收方。为了获得数据,我不得不重新启动应用程序,以便主要活动中的新值得到更新。对此任何的帮助深表感谢

问候 SAIF

回答

0

尝试更新MainActivity在onResume值它将很好地工作。

+0

非常感谢你是一个生命的救星先生 –

+0

你是欢迎:) –

0

Muthukishnan是正确的,因为onResume()将在创建和重新启动后调用,onCreate()仅在创建Activity时调用。

参见:Application Lifecircle