2015-08-25 58 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

谢谢迈克!我会:) –

相关问题