2015-08-25 4 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/Android-контента контекстно-getcontentresolver-на-нуль-объект-ссылка. –

ответ

1

Причина, почему вы получаете нулевой указатель потому, что активность не была создана правильно, следовательно, его контекст не создается.

HeadUpMain - это Android-активность. Вы никогда не должны создавать Activity с новым.

HeadUpMain nombre = new HeadUpMain(); // Wrong 

Вместо этого он должен быть запущен из Намерение с вашего AndroidManifest, или с помощью startActivity().

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

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

+0

Да, я получил вашу мысль, но как я могу назвать меток класса Activity (HeadUpMain). Насколько я понимаю, намерение начнет мою деятельность, но мне нужно только получить доступ к этому методу. И огромное спасибо, я думаю, что получил, спасибо! –

+0

У вас нет доступа к таким методам деятельности. У Activity есть жизненный цикл, который не привязан к внешнему классу, подобному этому, а скорее к действиям пользователя и действиям системы (например, к принятию телефонного звонка, который помещает вашу активность onPause. Вам действительно нужно прочитать, как работает Android Джованни. Вы не сможете ничего сделать, если просто прыгаете. По крайней мере, изучите 4 компонента и их жизненные циклы. :) – MikeWallaceDev

+0

Спасибо, майк! я буду :) –

Смежные вопросы