无法使用TextView

时间:2016-02-04 22:30:50

标签: android textview

我正在编写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(){})

2 个答案:

答案 0 :(得分:1)

您要做的是在布局中获取TextView R.id.getMsg的引用。您在findViewById类中使用了IntentService方法,但未提供此方法。 See Android Documentation

通常,您可以在生成周期方法中的ActivityFragment中执行此操作,例如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公共静态。