2013-02-25 5 views
12

私のクラスには、次のようになります。アクティビティのないクラスでgetContentResolverを使用するにはどうすればよいですか?

public class sendInformation{ 

    public void test() throws Exception { 
    Uri uri = SuspiciousActivityTable.CONTENT_URI; 
    getContentResolver().update(uri, values2, where,new String[]{"Null"}); 
    } 
    } 
} 

が、それはgetContentResolver()が存在しないと言う、私はこの仕事をするために、コンテキストまたはアクティビティを必要と知っているが、どのように私はここに正しいコンテキストを得るのですか?

+0

'ます。public void class'。クラスには戻り値の型はありません。 –

+0

だからこのクラスはアクティビティを拡張する別のクラスから呼び出されるので、私はそのコンテキストを渡すことになっています。 – user2033349

+0

私の編集を参照してください。通常、あなたは 'test()'に 'this'を渡します。 –

答えて

27

ContentResolverクラスでもインスタンス化するために有効なコンテキストが必要な場合でも、コンテキストを渡す必要があります。

public void test(Context context) throws Exception { 
    Uri uri = SuspiciousActivityTable.CONTENT_URI; 
    context.getContentResolver().update(uri, values2, where,new String[]{"Null"}); 
    } 

し、呼び出し:

最も簡単な方法は、メソッドに引数としてある(testを含むクラスがインスタンス化されると仮定しあなたの活動の名前はMyActivity <ある - Activity名に置き換えあなたは

try{ 
    sendInformationInstanceVariable.test (MyActivity.this); 
} 
catch (Exception e) 
{ 
e.printStackTrace(); 
} 

)からtest()を呼んでいます匿名の内部クラスの内部からtest()を呼び出していない場合は、とすると、はthisに短縮できます。あなたのクラスが実際にインスタンス化する十分な理由を持っていない場合

また、このように、static方法test()にすることを検討:次に

public static void test(Context context) throws Exception { 
     Uri uri = SuspiciousActivityTable.CONTENT_URI; 
     context.getContentResolver().update(uri, values2, where,new String[]{"Null"}); 
     } 

をごActivityから、あなたが必要とすることなく、このメソッドを呼び出しますインスタンス:

try{ 
    sendInformation.test (MyActivity.this); 
} 
catch (Exception e) 
{ 
e.printStackTrace(); 
} 

最後には、Exceptionは悪い習慣で投げ、正当な理由なしにそれをしないでください、あなたは十分な理由を持っている場合は、できるだけ具体的に。

+1

ありがとうたくさん私はこのことについてとても混乱していました。あなたが何をしているのかを理解すると簡単です:) – user2033349

+0

あなたはサービスでそれをやりますか?私の理解は、あなたがサービスにコンテキストを渡すことができないことです。 –

+1

@robertotomásサービスはコンテキストです –

8

はどこどこにアプリケーションが起動し(とあなたがgetApplicationContext()へのアクセス権を持っている)、あなたはtest()を呼び出す時点の間、あなたのsendInformationクラスにContextに合格する必要があります。私はあなたのsendInformationクラスがあり、ライフサイクル何を見て、様々なAndroidのコンポーネント(アプリケーション、活動、フラグメント)と比較し、そこから適切なコンテキストを使用します。

  • アプリケーション:getApplicationContext()

  • 活動:この(活動が伸びるとコンテキスト)

  • フラグメント:任意の意味をなさないgetActivity()
関連する問題