2015-08-25 103 views
0

我有一個名爲HeadUpMain.java的類,它包含方法NombreDueno(),此方法返回一個字符串。我從另一個類中調用這個方法,名爲contadorNotify,但我總是得到NullPointerException。我正在學習編碼,在這種情況下我不知道該怎麼做。提前致謝。這是HeadUpMain類的代碼的一部分。當我調用另一個類的方法時出現空指針異常

public class HeadUpMain extends AppCompatActivity { 

    public String NombreDueno(){ 
    final String[] projection = new String[] 
      { ContactsContract.Profile.DISPLAY_NAME }; 
    String name = " "; 
    String division[]; 
    String parte1 = " "; 

    final Uri dataUri = Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI, ContactsContract.Contacts.Data.CONTENT_DIRECTORY); 
    final ContentResolver contentResolver = getContentResolver(); 
    final Cursor c = contentResolver.query(dataUri, projection, null, null, null); 

    try 
    { 
     if (c.moveToFirst()) 
     { 
      name = c.getString(c.getColumnIndex(ContactsContract.Profile.DISPLAY_NAME)); 
      division = name.split(" "); 
      parte1 = division[0]; 
     } 
    } 
    finally 
    { 
     c.close(); 
    } 
    System.out.println(name); 
    return parte1; 

} 
} 

我調用該方法中的其他類,如下所示:

public class ContadorNotify extends CountDownTimer { 

HeadUpMain nombre = new HeadUpMain(); 



private long inicio, notifyFirst, notifySecond, notifyThird; 
private Context context; 
MensajesNotificacion portador = new MensajesNotificacion(); 

public ContadorNotify(long millisInFuture, long countDownInterval, long cancel, long first, long second, long thidr 
         , Context context) { 
    super(millisInFuture, countDownInterval); 
    inicio = cancel/1000; 
    notifyFirst = first/1000; 

} 

@Override 
public void onTick(long millisUntilFinished) { 
    //System.out.println("Seconds left: " + millisUntilFinished/1000); 
    if ((millisUntilFinished/1000) == inicio) { 
     onNotify("1"); 
    } 
} 

public void onNotify(String event) { 
    if (event == "1") { 
     Notificacion noti = new Notificacion(nombre.NombreDueno() , portador.getMensaje(), context); 
     noti.Notificador(); 
    } 
    } 
} 

我儘快通知它的觸發recivied空指針異常。

日誌是這樣的:

08-25 17:55:32.969 17782-17782/headup.digitalexperiences.com.headup E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: headup.digitalexperiences.com.headup, PID: 17782 
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ContentResolver android.content.Context.getContentResolver()' on a null object reference 
      at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:96) 
      at headapp.digitalexperiences.com.headapp.HeadUpMain.NombreDueno(HeadUpMain.java:163) 
      at headapp.digitalexperiences.com.headapp.ContadorNotify.onNotify(ContadorNotify.java:53) 
      at headapp.digitalexperiences.com.headapp.ContadorNotify.onTick(ContadorNotify.java:39) 
      at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:133) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5254) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

的可能重複[什麼是空指針異常,以及如何解決?(http://stackoverflow.com/questions/218384/what-is-a-null -pointer-exception-and-how-do-i-fix-it) – John3136

+0

查看http://stackoverflow.com/questions/2002288/static-way-to-get-context-on-android和http:// stackoverflow的.com /問題/ 29199308 /機器人化內容上下文getcontentresolver-上一個空對象引用。 –

回答

1

爲什麼你得到一個空指針的原因是因爲活動不被創建正確因此它的上下文不是創建。

HeadUpMain是一個Android活動。你絕不應該用new創建一個Activity。

HeadUpMain nombre = new HeadUpMain(); // Wrong 

相反,它應該從您的AndroidManifest的Intent或使用startActivity()啓動。

Intent intent = new Intent(context, HeadUpMain.class); 
startActivity(intent);     // Correct 

http://developer.android.com/training/basics/firstapp/starting-activity.html

+0

是的,我明白了你的意思,但是我怎樣才能調用HeadUpMain()Activity類的methot。據我瞭解,意圖將啓動我的活動,但我只需要訪問該方法。非常感謝,我想我明白了,謝謝! –

+0

您不能訪問這樣的Activity的方法。一個活動的生命週期並沒有附加到像這樣的外部類,而是附加到用戶操作和系統操作上(比如接到一個電話,這會讓你的活動開啓) 你真的需要了解Android的工作原理Giovanny,如果你只是跳進去,你將無法做任何事情。至少要了解4個組件和它們的生命週期。:) – MikeWallaceDev

+0

謝謝邁克!我會:) –

相關問題