2012-03-08 11 views
1

を修正する方法を知ることができません。ユーザーにボタンをクリックするだけの簡単なメインアクティビティがあり、後でボタンを追加します。 コンパイルするとコンパイルされますが、強制的にデバイス上で強制的に閉じます。nullポインタ例外です。

Heresマイアクティビティコードの後ろにlogcat出力が続きます。

package com.michaelpeerman.probability; 


import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import com.michaelpeerman.probability.R; 
public class MainActivity extends BaseActivity 
{ 
    View.OnClickListener buttonhandler = new View.OnClickListener() 
    { 
    public void onClick(View v) 
    { 
     Intent localIntent; 
     switch (v.getId()) 
     { 
     case R.id.cointoss: 

     localIntent = new Intent(MainActivity.this, CoinActivity.class); 
     MainActivity.this.startActivity(localIntent); 
     break; 

     } 
    } 
    }; 

    public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    tracker.trackPageView("/ApplicationHomeScreen"); 
    setContentView(R.layout.main); 
    Button localButton1 = (Button)findViewById(R.id.cointoss); 
    //Button localButton2 = (Button)findViewById(R.id.doctor10); 
    //Button localButton3 = (Button)findViewById(R.id.doctor11); 
    localButton1.setOnClickListener(this.buttonhandler); 
    //localButton2.setOnClickListener(this.buttonhandler); 
    //localButton3.setOnClickListener(this.buttonhandler); 
    } 





} 

Heres My LogCat Output。

03-08 18:29:12.664: E/AndroidRuntime(6467): FATAL EXCEPTION: main 
03-08 18:29:12.664: E/AndroidRuntime(6467): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.michaelpeerman.probability/com.michaelpeerman.probability.MainActivity}: java.lang.NullPointerException 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at android.os.Looper.loop(Looper.java:137) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at dalvik.system.NativeStart.main(Native Method) 
03-08 18:29:12.664: E/AndroidRuntime(6467): Caused by: java.lang.NullPointerException 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at com.michaelpeerman.probability.MainActivity.onCreate(MainActivity.java:36) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at android.app.Activity.performCreate(Activity.java:4465) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
03-08 18:29:12.664: E/AndroidRuntime(6467):  ... 11 more 

相続人は母の活動

package com.michaelpeerman.probability; 


import com.google.android.apps.analytics.GoogleAnalyticsTracker; 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 

public class BaseActivity extends Activity { 
private String donate_link = "market://details?id=com.michaelpeerman.donate"; 
private String rate_link = "market://details?id=com.michaelpeerman.probability"; 
private String more_apps = "market://search?q=pub:Michael Peerman"; 
private String sharetext = "Check out this amazing Probability app." + "\n" 
     + "\n" + "http://goo.gl/yU3jy"; 
GoogleAnalyticsTracker tracker; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    tracker = GoogleAnalyticsTracker.getInstance(); 
    tracker.startNewSession("REMOVED", 60, this); 
    } 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.donate: 
     tracker.trackEvent("Menu_Item", "donate", "clicked", 0); 
     startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(donate_link))); 
     break; 
    case R.id.rate: 
     tracker.trackEvent("Menu_Item", "rate", "clicked", 0); 
     startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(rate_link))); 
     break; 
    case R.id.moreapps: 
     tracker.trackEvent("Menu_Item", "more_apps", "clicked", 0); 
     startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(more_apps))); 
     break; 
    case R.id.share: 
     tracker.trackEvent("Menu_Item", "share", "clicked", 0); 
     Intent sharingIntent = new Intent(Intent.ACTION_SEND); 
     sharingIntent.setType("text/plain"); 
     sharingIntent 
       .putExtra(android.content.Intent.EXTRA_TEXT, sharetext); 
     startActivity(Intent.createChooser(sharingIntent, "Share using")); 
     break; 
    } 
    return true; 
} 
@Override 
public void onPause() { 
    super.onPause(); 
    tracker.dispatch(); 


} 
@Override 
public void onDestroy() { 
    super.onDestroy(); 
    tracker.dispatch(); 
    tracker.stopSession(); 

} 
} 

そして相続人Main.xml

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <TableRow 
     android:background="@drawable/coin_toss_banner" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"></TableRow> 
    <Button android:id="@+id/cointoss" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="Coin Toss" /> 
    </LinearLayout> 
+0

findViewById()がボタンを検出していないようです。 IDが正しく割り当てられていることを確認してください。 – jsmith

答えて

2

EDIT:これはmain.xmlまたはボタンとは何の関係もありません。場合でも、そこtrackerのために指定されていませんアクセス修飾子がありませんので、それは明らかにクラスを継承へのアクセスを許可しないデフォルトのアクセス修飾子、上で取るBaseActivityを見てみると

tracker.trackPageView("/ApplicationHomeScreen"); 

:次の行は、NULLポインタを投げています彼らは同じパッケージに入っています。あなたのコードを見ると、2つのクラスは同じパッケージ内にあるようです。それにかかわらず、trackerを明示的にprotectedと定義すると、パッケージに関係なく継承クラスからアクセスできるようになります。

私はまだこれで少し困惑しています。私が考える限り、それは編集してはならない。どういうわけかトラッカー変数はアクセス可能ですが、そのインスタンス化は...光を放つ潜在的なJavaエキスパートではありませんか?

+0

ok私はmain.xmlを投稿します – mpeerman

+0

それは今投稿されました – mpeerman

+0

トラッカーを保護されたものとして宣言できますか? –

1

何でもtrackerは、初期化されていません。私はあなたが拡張している基本クラスを持っているので、trackerがスーパークラスに正しく設定されていることを確認してください。これはコンストラクタまたはsuper.onCreate()のいずれかを意味します。

+0

トラッカーは基本アクティビティで初期化されています。基本クラスを含む質問が更新されました – mpeerman

関連する問題