12

私のクラスは次のようになります。

public class sendInformation{

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

しかし、それは存在しないと言っ getContentResolver()ています。これを機能させるにはコンテキストまたはアクティビティが必要ですが、ここで正しいコンテキストを取得するにはどうすればよいですか?

4

2 に答える 2

28

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

最も簡単な方法は、メソッドの引数としてです。

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

そして呼び出す:(を含むクラスtestがインスタンス化さ、アクティビティの名前が<-呼び出しMyActivity元の名前に置き換えられると仮定ます)Activitytest()

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

MyActivity.this匿名の内部クラス内から呼び出していないthis 場合に限り、短縮できます。test()

また、クラスにインスタンス化する正当な理由が本当にない場合は、次のようなメソッドを作成することを検討してくださいtest()static

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は悪い習慣です。正当な理由なしに投げないでください。正当な理由がある場合は、できるだけ具体的にしてください。

于 2013-02-25T22:47:34.220 に答える
9

アプリケーションが開始する場所(およびにアクセスできるgetApplicationContext()場所)と呼び出し元の間のどこかで、クラスtest()にを渡す必要がありContextます。sendInformationsendInformationクラスのライフサイクルを確認し、それをさまざまなAndroidコンポーネント(アプリケーション、アクティビティ、フラグメント)と比較して、そこから適切なコンテキストを使用します。

  • 応用:getApplicationContext()

  • アクティビティ:これ(アクティビティがコンテキストを拡張するため)

  • 断片:getActivity()
于 2013-02-25T22:48:22.203 に答える