我正在编写GCM应用程序。 我无法将收到的消息设置为文本视图。
检查以下代码:
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)未定义类型new Runnable(){})
答案 0 :(得分:1)
您要做的是在布局中获取TextView R.id.getMsg
的引用。您在findViewById
类中使用了IntentService
方法,但未提供此方法。 See Android Documentation
通常,您可以在生成周期方法中的Activity
或Fragment
中执行此操作,例如onCreate或onCreateView等,其中View作为参数值给出。这看起来类似于以下代码行:
TextView textview = (TextView)view.findViewById(R.id.getMsg);
在检索TextView引用后,您可以在实现的方法中使用它。
您需要一种方法来处理从Intent Service返回到Application / Activity等的数据。可能的解决方案是将检索到的消息数据从IntentService传递回您可以使用BroadcastReceiver的Activity(如图所示{{ 3}})
答案 1 :(得分:0)
您的textview在服务类中,textview必须处于活动状态 上课。如果要在活动中设置数据而不是创建接口 或使textview公共静态。