0

私はこのコードを使用する場合:MainActivity findViewByIdへのアクセスを取得するには、ブロードキャスト受信者の受信方法の中から?

@Override 
public void onReceive(Context context, Intent intent) { 

    seconds += 0.1; 

    if (seconds > 59.9) { 
     seconds=0; 
     minutes++; 
    } 

    TextView tv = (TextView)((MainActivity)context).findViewById(R.id.txtChron); 
    tv.setText (String.valueOf(minutes) + ":" + String.valueOf(seconds)); 
} 

MainActivityにコンテキストをキャストしようとしたとき、私はエラーを取得します。ここで

エラー/スタックトレースです:

E/AndroidRuntime:致命的な例外:メインプロセス: com.example.jordanbleu.lab8chronservjordanbleu、PID:22693 java.lang.RuntimeException:エラー放送受信 android.app.LoadedApk $ ReceiverDispatcher $ Args.runで com[email protected]d9365feに意図{ 行為= com.example.jordanbleu.lab8chronservjordanbleu.MY_TIME_TICK FLG = 0x10を}(LoadedApk.java :1132) android.o android.appでandroid.os.Looper.loop(Looper.java:154)で android.os.Handler.dispatchMessage(Handler.java:95)でs.Handler.handleCallback(Handler.java:751)。 ActivityThread.main(ActivityThread.java:6119)at java.lang.reflect.Method.invoke(ネイティブメソッド)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) at com .android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 原因:java.lang.ClassCastException:android.app.Applicationは にキャストできませんcom.example.jordanbleu.lab8chronservjordanbleu.MainActivityにキャスト com。 example.jordanbleu.lab8chronservjordanbleu.ChronometerReceiver.onReceive(ChronometerReceiver.java:41) at android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:1122)android.os.Handler.handleCallback(Handler.java:751) の android.os.Handler.dispatchMessage(Handler.java:95 )at android.os.Looper.loop(Looper.java:154)at android.app.ActivityThread.main(ActivityThread.java:6119)at java.lang.reflect.Method.invoke(ネイティブメソッド)at com.android.internal.os.ZygoteInit.mainでcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) (ZygoteInit.java:776)

だから私は持っていますMainActivity、サービスを開始します。サービスは新しいスレッドを作成し、このスレッドは暗黙のインテントを常に作成し、BroadcastReceiverによって処理されます。この放送受信機は、時計を更新し、レイアウト内の更新された時刻でTextViewを更新する。しかし、contextパラメータを使ってfindViewByIDにアクセスしようとすると、上記のエラーが出ます。

答えて

0

ActivityonCreate機能内でTextViewを初期化してください。

TextView tv = (TextView) findViewById(R.id.txtChron); 

は、その後、あなたのonReceive機能

@Override 
public void onReceive(Context context, Intent intent) { 
    seconds += 0.1; 
    if (seconds > 59.9) { 
     seconds=0; 
     minutes++; 
    } 

    tv.setText(String.valueOf(minutes) + ":" + String.valueOf(seconds)); 
} 
0

にあなたのエラーは、次のとおりです。

とjava.lang.ClassCastException:android.app.Applicationはcom.example.jordanbleuにキャストすることはできません。 lab8chronservjordanbleu。MainActivity

これは、「コンテキストコンテキスト」がMainActivityではなくApplicationであることを意味します。

私の提案は、あなたのTextViewをOnCreateで膨らませることです。

TextView tv; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    tv = (TextView) findViewById(R.id.txtChron); // This! 
... 
} 

@Override 
public void onReceive(Context context, Intent intent) { 

    seconds += 0.1; 

    if (seconds > 59.9) { 
     seconds=0; 
     minutes++; 
    } 

    tv.setText (String.valueOf(minutes) + ":" + String.valueOf(seconds)); 
} 
関連する問題