How to call method from another class without passing context?

14,647

Solution 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()

Solution 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.

Share:
14,647
Josh
Author by

Josh

Updated on June 29, 2022

Comments

  • Josh
    Josh almost 2 years

    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!

  • Josh
    Josh over 13 years
    Worked great! Thanks for the help, it is truly appreciated!
  • Josh
    Josh over 13 years
    Thank you for the advice. Through your advice and more reading I have learned how critical context handling is to memory management.
  • Rakesh
    Rakesh almost 12 years
    I guess getApplicationContext() is another way of doing the same.
  • Nitin Bansal
    Nitin Bansal over 11 years
    use getApplicationContext()