2014-09-10 17 views
0

Службы Google Play Games обрушивают мою игру, когда я выхожу из системы и обратно (используя GameHelper). Я прошел через каждую строку кода, и я не могу найти ни одной проблемы (нет сбоя, когда я НЕ использую сервисы Google Game).Как найти основную причину ошибки NullPointerException/RuntimeException

Но когда я запускаю свою игру, с библиотекой BaseGameUtils, и с помощью GameHelper, чтобы выйти, когда я вхожу назад в аварии Android приложение каждый раз с этой ошибкой:

Я устранения этой аварии в течение 3-х дней и у меня полная потеря. Любые советы по устранению неполадок или отладки этой ошибки приветствуются.

09-10 13:51:03.419: E/AndroidRuntime(9463): FATAL EXCEPTION: main 
09-10 13:51:03.419: E/AndroidRuntime(9463): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nurfacegames.testgame07/com.nurfacegames.testgame07.TestGame07}: java.lang.NullPointerException 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1696) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.app.ActivityThread.access$1500(ActivityThread.java:124) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.os.Looper.loop(Looper.java:130) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.app.ActivityThread.main(ActivityThread.java:3806) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at dalvik.system.NativeStart.main(Native Method) 
09-10 13:51:03.419: E/AndroidRuntime(9463): Caused by: java.lang.NullPointerException 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at com.nurfacegames.testgame07.MainMenuFragment.updateUi(MainMenuFragment.java:61) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at com.nurfacegames.testgame07.MainMenuFragment.onStart(MainMenuFragment.java:48) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.support.v4.app.Fragment.performStart(Fragment.java:1484) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:941) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1866) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:568) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at com.google.example.games.basegameutils.BaseGameActivity.onStart(BaseGameActivity.java:110) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at com.nurfacegames.testgame07.TestGame07.onStart(TestGame07.java:522) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.app.Activity.performStart(Activity.java:3871) 
09-10 13:51:03.419: E/AndroidRuntime(9463):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1669) 

Вот MainMenuFragment.class (который от Google):

public class MainMenuFragment extends Fragment implements OnClickListener { 

    String mGreeting = "Hello, anonymous user (not signed in)"; 

    public interface Listener { 
     public void onSignInButtonClicked(); 
     public void onSignOutButtonClicked(); 
    } 

    Listener mListener = null; 
    boolean mShowSignIn = true; 
    boolean mShowScreenMenu = true; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_mainmenu, container, false); 
     final int[] CLICKABLES = new int[] { 
       R.id.sign_in_button, R.id.sign_out_button 
     }; 
     for (int i : CLICKABLES) { 
      v.findViewById(i).setOnClickListener(this); 
     } 
     return v; 
    } 

    public void setListener(Listener l) { 
     mListener = l; 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     updateUi(); 
    } 

    public void setGreeting(String greeting) { 
     mGreeting = greeting; 
     updateUi(); 
    } 

    void updateUi() { 
     if (getActivity() == null) return; 
     TextView tv = (TextView) getActivity().findViewById(R.id.hello); 
     if (tv != null) tv.setText(mGreeting); 

     getActivity().findViewById(R.id.sign_in_bar).setVisibility(mShowSignIn ? 
       View.VISIBLE : View.GONE); 
     getActivity().findViewById(R.id.sign_out_bar).setVisibility(mShowSignIn ? 
       View.GONE : View.VISIBLE); 
     getActivity().findViewById(R.id.screen_menu).setVisibility(mShowScreenMenu ? 
       View.VISIBLE : View.GONE); 
    } 

    @Override 
    public void onClick(View view) { 
     switch (view.getId()) { 
     case R.id.sign_in_button: 
      mListener.onSignInButtonClicked(); 
      break; 
     case R.id.sign_out_button: 
      mListener.onSignOutButtonClicked(); 
      break; 
     } 
    } 

Это TestGame07.java линия 522 (super.onStart):

//------------------------------------------------------------------ 
// @@[email protected]@ 
//------------------------------------------------------------------ 
@Override 
protected void onStart () 
{ 
    Log.d (Globals.sApplicationName, "--------------------------------------------") ; 
    Log.d (Globals.sApplicationName, "Start activity " + Globals.sApplicationName) ; 
    Log.d (Globals.sApplicationName, "--------------------------------------------") ; 
    super.onStart () ; 
} 
+0

Обычно следующая строка после 'Caused by: java.lang.NullPointerException'. В вашем случае это: 'at com.nurfacegames.testgame07.MainMenuFragment.updateUi (MainMenuFragment.java:61)'. –

+1

Что вы нашли, когда посмотрели на эту строку 'MainMenuFragment.updateUi (MainMenuFragment.java:61)' – tyczj

+0

В журнале сказано, что NullPointerException вызвано этой строкой: 'com.nurfacegames.testgame07.MainMenuFragment.updateUi (MainMenuFragment.java: 61) '. Проверьте код ошибки. – hfann

ответ

0

Один из трех видов (R.id.sign_in_bar или R.id.sign_out_bar или R.id.screen_menu, я не вижу номеров строк, поэтому я не могу сказать, какой из них) не найден, поэтому один из методов setVisibility() ссылается на нулевой объект, он генерирует ошибку NullPointException.

+0

Привет, @skrzatswat, Добро пожаловать в Stackoverflow. Пожалуйста, примите [тур] (http://stackoverflow.com/tour), чтобы узнать, как правильно форматировать ваши вопросы. Если вы можете опубликовать фактический код xml, logcat и строки, определенные в ошибке logcat, чем вы с большей вероятностью получите справку. – RyPope

0

В этой программе NullPointerException было вызвано из-за метод updateUi

void updateUi() { 

    if (getActivity() == null) return; 
    TextView tv = (TextView) getActivity().findViewById(R.id.hello); 
    if (tv != null) tv.setText(mGreeting); 

    getActivity().findViewById(R.id.sign_in_bar).setVisibility(mShowSignIn ? 
      View.VISIBLE : View.GONE); 
    getActivity().findViewById(R.id.sign_out_bar).setVisibility(mShowSignIn ? 
      View.GONE : View.VISIBLE); 
    getActivity().findViewById(R.id.screen_menu).setVisibility(mShowScreenMenu ? 
      View.VISIBLE : View.GONE); 
} 

исключение нулевого указателя всегда возникают, когда какие-либо из поля или переменного держит нулевое значение, и мы стараемся использовать их в коде

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