2017-01-03 12 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参照が行われていると、それらはすべて、それを試してみて、バイパスするいくつかのことを試してみました:

は、私は1つの活動から別のものに移動しようとすると、このエラーを取得していますアプリケーションをクラッシュさせます。ここで

は私が活動を開始するブロックである。

@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(); 
    } 
} 

私が最初にどのAccountActivityでsetInitialFragment()を呼び出しています私のbaseActivityを拡張します:

@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

あなたは、本当に役立つために必要なすべての情報を私たちに提供しませんでした。

私はあなたのAccountActivityであなたのsetInitialFragmentはこのようなものになるだろうイメージングよ:

setInitialFragment(Fragment fragment); 

です:あなたは、あなたが2つの異なる方法で、これを呼び出している投稿内容に基づき

public class AccountActivity extends BaseActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.container); 
     AccountFragment fragment = AccountFragment.getInstance(); 
     setInitialFragment(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

関連する問題