在安卓系统中如何调用getContentResolver()函数?

82
我想知道在什么情况下会调用 getContentResolver()
我有这样的一个场景:
我有一个活动 A,它调用类 B 的方法 myFunc(),该类不是一个活动。
因此,在类 B 中,我必须使用 getContentResolver()。 我直接调用了 getContentResolver(),但出现了错误。 然后我从活动中调用了 myFunc(Acitivy act) 方法,并调用了 act.getContentResolver(),这解决了我的问题。 这是调用 getContentResolver() 的唯一方式吗? 这意味着它只能与活动相关联使用还是可以单独使用。
8个回答

131

getContentResolver()android.content.Context 类的方法,因此要调用它,你必须拥有一个 Context 实例(例如 Activity 或 Service)。


56

您可以像这样使用:

getApplicationContext().getContentResolver()

通过适当的上下文呈现。


24
当你需要在一个不是Activity的类中使用getApplicationContext()时,它是未定义的。 - Paweł Gościcki
1
在这种情况下,您不能使用这种方式。 - Ankit Jain
5
根据一个片段的上下文,你可以使用getActivity().getContentResolver()。 - ASP Force
使用 getContext() @PawełGościcki - Jin Lim
@PawełGościcki 但大多数情况下会在活动类中使用它。因此,这得到了很高的投票。但是您提出的观点已经被注意到。谢谢。 - GeneCode

8
getContentResolver()方法还用于在使用Cursor对象查询Contact时。我已经使用getContentResolver()来查询Android手机上的Contacts应用程序,查找某个人的电话号码中的联系信息,并将其包含在我的应用程序中。查询中不同的元素(如下所示)表示您想要哪种联系方式详细信息,以及它们是否应该被排序等。这里有另一个例子

来自Android文档中Content Provider Basics页面。

// Queries the user dictionary and returns results
mCursor = getContentResolver().query(
    UserDictionary.Words.CONTENT_URI,   // The content URI of the words table
    mProjection,                        // The columns to return for each row
    mSelectionClause                    // Selection criteria
    mSelectionArgs,                     // Selection criteria
    mSortOrder);                        // The sort order for the returned rows

4
import android.content.Context;
import android.content.ContentResolver;

context = (Context)this;
ContentResolver result = (ContentResolver)context.getContentResolver();

谢谢,不知道为什么没有人说从哪里导入。 - Daniel Barde

1
  //create activity object to get activity from Activity class for use to content resolver
    private final Activity ActivityObj;

  //create constructor with ActivityObj to get activity from Activity class
    public RecyclerViewAdapterClass(Activity activityObj) {
        this.ActivityObj = activityObj;
    }


     ActivityObj.getContentResolver(),.....,.....,null);

你正在回答一个7年前的问题,该问题已经有了一个好的和被接受的答案,以及许多其他覆盖更多选项的答案。此外,你的答案只是一个带有2个注释的代码片段。通常最好在你的代码中添加一些解释性文本(或者更好的是,编写一个文本答案,并添加代码来展示你所解释的内容)。如果你想回答问题,这是很好的,尽量关注更近期的(最好是未回答的)问题。如果你回答一个已经有答案的问题,请确保你的答案涵盖了其他答案没有涵盖的点。 - Leon

1

在 Kotlin 中访问 contentResolver,包括在活动、对象类等内部:

Application().contentResolver

我有点觉得这不是一个好主意。可以说是“蜘蛛侦测器”的感觉。无论如何,感谢 Kotlin。 - Eray Erdin

0

这个对我有用 getBaseContext();


0
一个解决方案是从上下文中获取ContentResolver
ContentResolver contentResolver = getContext().getContentResolver();

文档链接:ContentResolver


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接