How to call method from another class without passing context?

早过忘川 提交于 2019-11-28 06:06:07

问题


I am currently trying to call a method from a utility class that will reference a new cursor created for this utility method. Unfortunately, my new class will not let me create the cursor without context. I have tried numerous ways of passing context from the calling activity, but get null pointer exceptions in most cases.

Here is the portion of my code:

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                        Tools.pickRandomItem();

                    }
});

and in the Tools Class:

     public static void pickRandomItem() {   

    Cursor cur = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, 
               null, null,MediaColumns.TITLE + " ASC");




}

Using the above code it throws an error on getContentResolver(), and all attempts I've made to pass context have failed.

I am fairly new to programming for Android, and don't fully understand the concept of contexts. Any help you could provide would be greatly appreciated!


回答1:


Create a class that extends Application for your project (you have to declare it in the Manifest too), in the Application make a

private static MyApplication app

in the onCreate() of it assign it to the field

app = this;

and make a

public static MyApplication get()

in it. When you need a Context you can use a

MyApplication.get()



回答2:


A few hints on Context:

  1. Get Context in you View via getContext() and pass it to getContentResolver(context).

  2. Use application-context approach as described here by @apps.

  3. Don't store context inside Activity or Views. This leads to memory leaks.



来源:https://stackoverflow.com/questions/4177731/how-to-call-method-from-another-class-without-passing-context

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!