2016-02-04 17 views
-1

我在寫一個GCM應用程序。 我無法將收到的消息設置爲文本視圖。無法使用TextView

檢查下面的代碼:

public class GcmMessageHandler extends IntentService { 

    String mes; 
    private Handler handler; 

    public GcmMessageHandler() { 
     super("GcmMessageHandler"); 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     handler = new Handler(); 
    } 

    @Override 
    public void onHandleIntent(Intent intent) { 
     Bundle extras = intent.getExtras(); 

     GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); 
     String messageType = gcm.getMessageType(intent); 
     mes = extras.getString("title"); 
     showMsg(); 
     Log.i("GCM", "Received : (" +messageType+") "+extras.getString("title")); 
     GcmBroadcastReceiver.completeWakefulIntent(intent); 
    } 

    public void showMsg(){ 
     handler.post(new Runnable() { 
      public void run() { 

       TextView textview = (TextView)findViewById(R.id.getMsg); 
       textview.setText(mes); 
      } 
     }); 
    } 
} 

(錯誤消息:該方法findViewById(INT)是未定義的類型新的Runnable(){})

+0

我不認爲向textview添加文本需要處於可運行狀態。這不是錯誤,但我想我會對此發表評論。 – Onimusha

回答

1

什麼你想要做的是在佈局中獲取TextView R.id.getMsg的引用。您在IntentService類中使用findViewById方法,該方法不提供此方法。 See Android Documentation

通常你做的是,在生命週期的方法,如的onCreate或onCreateView等,其中的觀點是給定的參數值的ActivityFragment。這看起來類似於下面的代碼行:

TextView textview = (TextView)view.findViewById(R.id.getMsg); 

檢索完你的TextView的引用之後,你能夠實現的方法來使用它。

您需要一種方法來將數據從您的意向服務處理回您的應用程序/活動等。一種可能的解決方案可能是將檢索到的消息數據從IntentService傳遞迴您可以使用BroadcastReceiver的Activity(如圖所示here

+0

非常感謝您的回覆。我想下面的代碼,現在我在「視圖」收到錯誤:[視圖不能解析】公共無效showMsg(){ handler.post(新的Runnable(){ 公共無效的run(){ \t \t TextView textview =(TextView)view.findViewById(R.id.getMsg); \t \t \t \t textview.setText(mes); } –

0

你的textview是在服務類和textview必須在活動 類。如果您想在活動中設置數據,請創建界面 或使textview爲公共靜態。