2016-07-26 3 views
-2

у меня есть ошибка Attempt to invoke virtual method 'android.support.v7.app.AlertDialog android.support.v7.app.AlertDialog$Builder.create()' on a null object reference каждый раз, когда я создаю свое приложение

вот код моей ошибки

07-26 15:04:32.587 18897-18915/com.example.study E/AndroidRuntime: FATAL EXCEPTION: Thread-385 
Process: com.example.study, PID: 18897 
java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v7.app.AlertDialog android.support.v7.app.AlertDialog$Builder.create()' on a null object reference 
    at com.example.study.Splash.checking(Splash.java:66) 
    at com.example.study.Splash$2.run(Splash.java:51) 

это произошло в моей всплеск активности, вот мой код

package com.example.study; 

import android.content.DialogInterface; 
import android.os.Bundle; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 

import com.example.study.helper.SessionManager; 
import com.example.study.util.ConnectionDetector; 

public class Splash extends AppCompatActivity { 

    private ConnectionDetector cd; 
    Boolean isInternetPresent = false; 
    protected SessionManager session; 

    private AlertDialog.Builder builder; 


    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_splash); 


     AlertDialog.Builder builder = new AlertDialog.Builder(Splash.this); 

     session = new SessionManager(getApplicationContext()); 
     cd = new ConnectionDetector(getApplicationContext()); 

     builder.setTitle("No Connection"); 
     builder.setMessage("Check Your Internet Connection."); 
     builder.setIcon(R.drawable.fail); 
     builder.setPositiveButton("OK", new 
DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int id) { 

        /* TODO Auto-generated method stub */ 
       dialog.dismiss(); 
      } 
     }); 

     Thread timer = new Thread(){ 
      public void run(){ 
       try { 
        sleep(2000); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally { 
        checking(); 
       } 
      } 
     }; 
     timer.start(); 
    } 

    public void checking() { 

     isInternetPresent = cd.isConnectingToInternet(); 

     if(isInternetPresent) { 
      session.checkLogin(); 
      finish(); 
     } else { 
      builder.create().show(); 
      finish(); 
     } 
    } 
} 

не знаю, что делать ... пожалуйста, помогите решить эту проблему,

+0

сообщение код, пожалуйста, для заставке :) –

+1

Нет, я имею в виду, просто скопировать код в экранную заставку, редактировать ваш вопрос, и вставьте код на свой вопрос, таким образом, люди смогут увидеть ваш код и помочь вам с ним :) –

+0

oh my .. я попытался .. но всегда сказал ошибку на коде .. и продолжаю пытаться сейчас –

ответ

0

Я думаю, что это терпит неудачу в вашем методе checking(). Вы объявили глобальную переменную с именем builder, затем вы указали другую переменную внутри своего onCreate(). В вашем методе checking() он ссылается на глобальную переменную, которую вы не инициализировали, только объявляете.

Возможное решение, изменить следующим образом:

AlertDialog.Builder builder = new AlertDialog.Builder(Splash.this); 

в

builder = new AlertDialog.Builder(Splash.this); 
+0

«Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare()», произошел на моем «check();» –

+0

А я думаю, что это потому, что ваш строитель запускается из-за пределов главного потока, который является потоком пользовательского интерфейса (я забыл причудливые имена), в настоящее время я использую материалы для Google, использую ключевое слово 'Alertdialog in Handler' для справки –

+0

Я не могу найти никаких Хороший ответ, и это может быть немного взломанным, и я не знаю, что он может работать, стоит попробовать, попробуйте использовать метод runOnUiThread(), как описано здесь http://stackoverflow.com/questions/11140285/how-to-use -runonuithread, и могу ли я узнать, в чем цель 'finish()' после 'builder.create(). show();'? –

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