2016-10-20 3 views
-1

方法を変更し、ユーザーのプレゼンスの変化のリスナーを使用していた。..以下 は私のコード..ですカント更新UIは、私がandroid.Iでピシャリとopenfireを使ってAndroidのアプリケーションを作成していピシャリアンドロイド

toolbar_status=(TextView)findViewById(R.id.toolbar_status) ; 
    roster.addRosterListener(new RosterListener() { 
       @Override 
       public void entriesAdded(Collection<String> addresses) { 

       } 

       @Override 
       public void entriesUpdated(Collection<String> addresses) { 

       } 

       @Override 
       public void entriesDeleted(Collection<String> addresses) { 

       } 

       @Override 
       public void presenceChanged(Presence presence) { 
        Log.wtf("CRA","Presence changes---------------"); 
        Log.wtf("CRA","new presence is : "+presence.getFrom()+" "+presence.isAvailable()); 
        toolbar_status.setText(setStatus(presence.isAvailable())); 
       } 
      }); 

私はtoolbar_statusという名前のtextviewを現在の値で更新しています... 問題が存在すると、問題が表示され、さらにログも表示されますが、現在の値は実行時に更新されません。値はtextに設定されていますアクティビティを再度開いたときに表示されます。 つまり、実行時にUIと対話できない、presentChanged関数内にあります。 私はアンドロイドの初心者です。どうすれば間違っているのか分かります。

答えて

1

presenceChanged()がバックグラウンドスレッドから呼び出されている可能性があります(わからない、スマックに慣れていない)。

もしそうなら、そこからUIをタッチすることはできません。

あなたは次のことを行うことができます:(UIを更新することができ、そこから)メインスレッドのメッセージキューにこのRunnableを掲載します

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     toolbar_status.setText(setStatus(presence.isAvailable())); 
    } 
}); 

関連する問題