2015-06-21 100 views
0

我是新來的android和卡住了一個小問題。我在Relativelayout中有TextView元素。而且我的應用程序正在從GCM接收broadcast,並且想根據收到的broadcast動態更新此TextView。我曾嘗試使用TextViewElementId.setText方法。但它不起作用。無法更新textview

從layout.xml文件

<TextView 
    style="@style/LabelFont" 
    android:id="@+id/txtView1" 
    android:text="-" 
    android:textColor="#ffffff" 
    android:layout_alignParentRight="true"/> 

片段從我的Activity類(在這裏我通過適當的數據和文本視圖ID setBroadcastText方法)

public void setBroadcastText(final String pstrText ,final TextView tvView){ 

    handler.post(new Runnable() 
    { 
     public void run() 
     { 
      ptvView.setText(pstrText); 
     } 
    }); 

}

這個片段當收到與此文本框相關的數據時,將調用setBroadcastText方法。

我是否需要在運行時添加一些內容來更新此文本視圖?

+0

有沒有例外,或者它不起作用? –

+0

它是否在'ptvView.setText(pstrText);'行中斷? – Youngjae

+0

是的..有一個例外:空指針異常。 java.lang.NullPointerException:嘗試在空對象引用上調用虛擬方法'boolean android.os.Handler.post(java.lang.Runnable)'。我猜,它將tvView引用爲空對象引用。嘗試在null對象引用上的int android.widget.TextView.getID()上調用虛擬方法。 – Yasha

回答

0

您的處理程序爲空。因此它崩潰。

+0

TextView。 android.widget.TextView.getID()正在調用空對象引用,即在findViewById中傳遞的R.id.TextViewId爲null。 – Yasha

0
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Handler.post(java.lang.Runnable)' on a null object reference. 

這意味着處理程序爲空。 你應該調用方法後像現在這樣的初始化處理程序對象:

handler=new Handler(); 
+0

它不是空的處理程序。但是TextView。 android.widget.TextView.getID()正在調用空對象引用,即在findViewById中傳遞的R.id.TextViewId爲null。 – Yasha

0

很多[R & d後,這是我想通。 要更新視圖,並接收到廣播時,請執行下列操作:

在GCMIntentService類,

import android.support.v4.content.LocalBroadcastManager 
//your code 
protected void onMessage(final Context arg0, final Intent arg1) { 
//Other parts of your code 
Intent broadcast = new Intent("IntentName"); 
           broadcast.putExtra("Intent_Key", "Intent_Value"); 
           LocalBroadcastManager.getInstance(context).sendBroadcast(broadcast); 
} 

現在,在活動課,其中文本視圖必須更新,收到此廣播。就是這樣。

import android.support.v4.content.LocalBroadcastManager; 
// 
protected void onCreate(Bundle savedInstanceState) { 
//Other parts of onCreate 
    LocalBroadcastManager.getInstance(this).registerReceiver(NewMethodName, 
       new IntentFilter("IntentName")); 

} 

實現您的方法NewMethodName()作爲BroadcastReceiver()方法來更新您的運行時視圖。