2017-01-03 6 views
1

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

Я получаю эту ошибку при попытке перейти от одного вида деятельности к другому:

FATAL EXCEPTION: main 
       Process: com.package, PID: 15338 
       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package/ui.activity.AccountActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getId()' on a null object reference 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
        at android.app.ActivityThread.-wrap11(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getId()' on a null object reference 
        at ui.activity.BaseActivity.setInitialFragment(BaseActivity.java:181) 
        at ui.activity.BaseActivity.setInitialFragment(BaseActivity.java:174) 
        at ui.activity.BaseActivity.setInitialFragment(BaseActivity.java:160) 
        at ui.activity.AccountActivity.setInitialFragment(AccountActivity.java:38) 
        at ui.activity.BaseActivity.onCreate(BaseActivity.java:56) 
        at android.app.Activity.performCreate(Activity.java:6237) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
        at android.app.ActivityThread.-wrap11(ActivityThread.java)  
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
        at android.os.Handler.dispatchMessage(Handler.java:102)  
        at android.os.Looper.loop(Looper.java:148)  
        at android.app.ActivityThread.main(ActivityThread.java:5417)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

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

Вот блок, где я инициирую активность:

@Override 
public void onMyAccountOptionSelected() { 
    Intent intent = new Intent(this, AccountActivity.class); 
    startActivity(intent); 
} 

Тогда он попадет сюда на view.getId(), это один в baseActivity:

private void setInitialFragment(View view, Fragment fragment) { 
    if (this.getCurrentFragment() == null) { 
     FragmentManager fragmentManager = this.getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(view.getId(), fragment).commit(); 
    } 
} 

Я изначально вызывающий setInitialFragment() в AccountActivity, который расширяет мою базовую активность:

@Override 
protected void setInitialFragment() { 

    fragment = (AccountFragment) AccountFragment.newInstance(); 
    setInitialFragment(fragment); 

} 

Как вы можете видеть выше есть теперь AccountFragment, в этом классе я простираться от abstractFragment и есть способ объявить newInstance:

public static Fragment newInstance() { 

    AccountFragment fragment = new AccountFragment(); 
    return fragment; 
} 

я не могу найти где-нибудь еще, где он может влиять на процесс, используемый для переходя к этой деятельности. Я надеюсь найти метод для быстрого исправления или найти более подходящий способ решить эту проблему.

Любая помощь очень ценится!

+0

Где вы звоните setInitialFragment? – mromer

+0

@mromer Я обновляю вышеуказанный вопрос, чтобы быть более наглядным. Спасибо что подметил это. – Keeano

+0

@mromer Я обновил вопрос, чтобы предоставить немного больше информации, я надеюсь, что это поможет вам – Keeano

ответ

2

Вы не предоставили нам всю необходимую информацию, чтобы быть действительно полезной.

я визуализации, что ваш setInitialFragment в вашем AccountActivity будет что-то вроде этого:

public class AccountActivity extends BaseActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.container); 
     AccountFragment fragment = AccountFragment.getInstance(); 
     setInitialFragment(fragment); 
    } 

} 

Основываясь на том, что вы в курсе, ваш вызываете 2 различные методы, это:

setInitialFragment(Fragment fragment); 

является не совпадает с этим

setInitialFragment(View view, Fragment fragment) 
+0

Это выглядит очень похоже на это. Для чего вам предназначено решение? Я спрашиваю, потому что я никогда не писал этот код, я вхожу в базу кода, на которой я не знаком на 100%. – Keeano

+2

Для меня лучшее место для изучения этого «шаблона» проходит через этот код [Google IO 2016 Android] (https://github.com/google/iosched/tree/master/android/src/main/java/com/google/samples/apps/iosched/ui) открывает класс BaseActivity и является дочерним классом SearchActivity, чтобы начать изучать, как следует обрабатывать эту логику. Это легко после того, как вы немного перешли к механике – MatPag

+0

Я прочитал код в этих файлах, и я до сих пор не вижу, где он будет применяться в моем положении?Я пробовал много разных вещей, и я продолжаю получать тот же результат. – Keeano