无法在我的firebase服务中解析方法'findViewById(int)'

时间:2017-12-20 23:25:58

标签: java android firebase firebase-cloud-messaging

我在Android Studio上创建的服务中遇到此问题。

enter image description here

我创建了一个新服务,它是一个 .java 文件,我不能在这个服务中使用findViewById。我想我必须在那里以某种方式引用MainActivity,我不知道如何要做到这一点,我想要一些帮助。如果我有一些错误,但我是Android开发人员的begginer。 谢谢。

这是我所做服务的代码

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());
        }
    }
}

2 个答案:

答案 0 :(得分:1)

如果您需要在服务中进行ui更改,则必须在项目中开发通信部分。 您可以开发通信部件,让Activity知道来自Service的UI更改请求。

有几种方法可以实现这一点。您可以使用Broadcast,Binder和Message之一。

请使用以下网址查看更多详细信息: http://developer.samsung.com/galaxy/others/effective-communication-between-service-and-activity

答案 1 :(得分:0)

您不应该从服务更新UI,而是从活动更新,但如果您真的需要,那么在尝试调用方法findViewById()之前需要执行一步:

1)获得inflater参考:

LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

2)现在,使用引用来调用findViewById方法:

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

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