我在Android Studio上创建的服务中遇到此问题。
我创建了一个新服务,它是一个 .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());
}
}
}
答案 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);