2016-11-09 16 views
1

最近Androidのアノテーションを使用し始めましたが、クラス(MyService)内からさまざまなTextViewにテキストを設定しようとしています。別のクラスからTextViewにアクセスする際のAndroidアノテーションの問題

テキストを設定しようとしたときに残念ながら、アプリケーションがnullpointerexceptionでクラッシュします。

私はすでに注釈(documentation)とを探しましたが、同じ問題についてはstackoverflowで検索しましたが、これで正しい方法を見つけることができません。

誰かがこれを正しい方法でやるのを手伝ってくれたら、私は感謝しています。

注釈を覚えようとしているので、下垂体で穏やかにしてください。

クラス(DownloadsDialog)TextViewsが通過intiatedされている(を@ViewById):

@EFragment(R.layout.downloads_dialog) 
public class DownloadsDialog extends BaseDialog implements LoaderManager.LoaderCallbacks<BaseResponse> { 
.. 
@ViewById(R.id.statusTxt) 
    TextView mStatusTxt; 

@ViewById(R.id.sizeTxt) 
    TextView mSizeTxt; 

@ViewById(R.id.progress1) 
    ProgressBar mProgress; 
.. 
} 

そして、これは私がセットテキストにしようとしていたから、クラス(たMyService)でありますこれらのTextViews:

public class MyService extends IntentService { 
.. 
public MyService() { 
     super("MyService"); 
    } 
.. 

class MyDownloadDownloadStatusListenerV1 implements DownloadStatusListenerV1 { 

     @Override 
     public void onDownloadComplete(DownloadRequest request) { 
      final int id = request.getDownloadId(); 
      if (id == downloadId1) { 
       // How to access TextView in DownloadsDialog?      
      mStatusTxt.setText("Status: completed");      

      Log.e("TAG", "download completed"); 
      } 
     } 
.. 
} 

答えて

0

インテントサービスがビューまたはl ayoutファイルですか?

@EFragment(R.layout.downloads_dialog) 

あなたがこれを言っている。この方法は、ここで私のすべてのライブラリがそこからフェッチしてからJavaオブジェクトにIDが割り当てられますように言及したウィジェット以下のビューファイルです。

@EBean 

しかし、インテントサービスの場合、レイアウトファイルが存在しないので、それがヌルポインタを与えることは明らかです。

+0

返信のためのThx、Okので、MyServiceクラスで "@ViewById"と "@EBean"を削除する必要がありますか? DownloadsDialogでTextViewにアクセスするにはどうしたらいいですか?コードが編集されました。 – Simon

+0

サービスでアラートダイアログを作成し、それをハンドラを使用して表示するか、ダイアログでフィールドを静的にしてダイアログオブジェクトをサービスに渡すことができます。静的参照を使用してtextviewオブジェクトを変更できます。 – androidnoobdev

+0

Ok Thx、@ViewById(R.id.statusTxt)public static TextView mStatusTxt; Android Studioではこれがメモリリークを引き起こすと警告しています。 – Simon

関連する問題