2017-12-20 21 views
1

Android Studioで作成したサービスでこの問題が発生しました。firebaseサービスでメソッド 'findViewById(int)'を解決できません

enter image description here

私は新しいサービスを作成し、それがの.javaファイルで、私はこのservice.I内findViewById使用することはできません私は内部が何とかMainActivityを参照する必要があります考えて、私は知りませんどのようにそれを行うには、私はいくつかの間違いがある場合いくつかの助けが必要です。私はAndroid Developingの初心者です。 ありがとうございます。

これは、私はあなたがサービスからではなく、活動からUIを更新するべきではありませんが、あなたは本当に、あなたがしようとする前に、1つのステップを実行する必要がありする必要がある場合

package com.example.qkiri.buttonnum; 

import android.app.Activity; 
import android.util.Log; 
import android.view.View; 
import android.widget.TextView; 

import com.google.firebase.messaging.FirebaseMessagingService; 
import com.google.firebase.messaging.RemoteMessage; 

import static android.content.ContentValues.TAG; 


public class MessageRec extends FirebaseMessagingService { 
    public MessageRec(MainActivity mainActivity) { 
    } 
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 

     int number; 
     Log.d(TAG, "From: " + remoteMessage.getFrom()); 

     number = 23; 
     final TextView txtView2 = (TextView) findViewById(R.id.service); 
     txtView2.setText(number); 

     if (remoteMessage.getData().size() > 0) { 
      Log.d(TAG, "Message data payload: " + remoteMessage.getData()); 
     } 

     if (remoteMessage.getNotification() != null) { 
      Log.d(TAG, "Message Notification Body: " + 
      remoteMessage.getNotification().getBody()); 
     } 
    } 
} 
+0

を使用すると、アクティビティインスタンスを使用した場合でも、まだレイアウトを見つけることができない場合があります。..活性に対するBroadcastReceiverを実装すると、更新するための正しい方法でありますUI –

+0

サービスバディの場合は間違った使い方。クリケットが示唆していることに従ってください。 – hepizoj

答えて

0

を作っサービスからのコードです呼び出し方法findViewById():

1)インフレータ参照得る:

LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 

2)次に、findVを呼び出すために参照を使用表示方法:

View layout = inflater.inflate(R.layout.myLayout, null); 

final TextView txtView2 = (TextView) layout.findViewById(R.id.service); 
+0

私はそれをしましたが、 "layout.findViewById(R.id.service)"でエラーが発生しました。エラーは "メソッドfindViewByIdはUIスレッドから呼び出されなければならず、現在推定されたスレッドはワーカーです" –

1

サービスでUIを変更する必要がある場合は、プロジェクトで通信部品を開発する必要があります。 コミュニケーションパーツを開発して、アクティビティにサービスからのUI変更要求を知らせることができます。

これを実装する方法はいくつかあります。ブロードキャスト、バインダー、メッセージのいずれかを使用できます。

URLを以下でより詳細に確認してください: http://developer.samsung.com/galaxy/others/effective-communication-between-service-and-activity

関連する問題