2013-02-25 5 views
12

meine Klasse sieht wie folgt aus:Wie verwenden Sie getContentResolver in einer Klasse ohne Aktivität?

public class sendInformation{ 

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

aber es sagt getContentResolver() existiert nicht, ich weiß, ich brauche einen Kontext oder Aktivität, diese Arbeit zu machen, aber wie bekomme ich das hier richtig Kontext?

+0

'public void CLASS', die keinen Sinn macht. Klassen können keinen Rückgabetyp haben. –

+0

Okay, diese Klasse wird von einer anderen Klasse aufgerufen, die die Aktivität erweitert, also sollte ich diesen Kontext weitergeben, wie kann ich das tun? – user2033349

+0

sehe meine Bearbeitung. Normalerweise übergibst du 'this' an' test() ' –

Antwort

27

Sie müssen einen Kontext übergeben, selbst die Klasse ContentResolver benötigt einen gültigen Kontext, der instanziiert werden soll.

einfachste Weg ist, als Argument für die Methode:

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

Und zu nennen: (unter der Annahme, dass die Klasse, die test enthält instanziiert und Ihre Aktivitäten Name ist MyActivity < - Ersetzen mit dem Activity Namen Sie anrufen test()von)

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

MyActivity.this kann auf thisverkürzt werden, wenn Sie test() aus einer anonymen inneren Klasse aufrufen.

Auch wenn Ihre Klasse wirklich keinen guten Grund hat instanziiert werden, betrachten test() machen ein static Methode, wie folgt aus:

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

Dann von Ihrem Activity, rufen Sie diese Methode ohne ein zu benötigen Beispiel:

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

Schließlich Exception werfen ist eine schlechte Praxis, tun es nicht ohne guten Grund, und wenn Sie einen guten Grund haben, so genau wie möglich.

+1

danke viel ich war so verwirrend, ist einfach, wenn Sie verstehen, was machst du dank :) – user2033349

+0

wie würdest du es in einem Service tun?Mein Verständnis ist, dass Sie den Kontext zu einem Service _cannot_ nicht übergeben können. –

+1

@ robertotomás Ein Service ist ein Kontext –

8

Irgendwo zwischen dem Ihre Anwendung gestartet wird (und Sie haben Zugriff auf getApplicationContext()) und dem Punkt, an dem Sie test() nennen, müssen Sie in einem Context auf Ihre sendInformation Klasse zu übergeben. Ich würde schauen, was lifecycle Ihre sendInformation Klasse und vergleichen Sie es mit den verschiedenen Android-Komponenten (Application, Aktivität, Fragment) und verwenden Sie den entsprechenden Kontext von dort:

  • Anwendung: getApplicationContext()

  • Aktivität: dies (als Aktivität erstreckt Context)

  • Fragment: getActivity()
Verwandte Themen