2012-03-08 35 views
1

好吧,我有一個簡單的主要活動,只是向用戶提供一個按鈕來點擊,稍後我將添加更多的按鈕。 當我編譯它時,它會編譯,但它強制立即在我的設備上關閉。空指針異常。無法弄清楚如何修復

繼承人我的活動代碼後跟我的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); 
    } 





} 

繼承人我的LogCat輸出。

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()沒有找到按鈕。仔細檢查您的XML以確保該ID已正確分配。 – jsmith 2012-03-08 23:41:59

回答

2

編輯:這有什麼好做的main.xml或按鈕。下面一行是拋出空指針:

tracker.trackPageView("/ApplicationHomeScreen"); 

看着BaseActivity沒有用於tracker指定訪問修飾符,因此需要對默認的訪問修飾符,這顯然不允許繼承類的訪問,即使他們在相同的包裹。看看你的代碼,這兩個類似乎在同一個包中。無論如何,明確定義trackerprotected將允許它從繼承類訪問,而不管包。

我對此仍然有點難過。就我而言,它不應該編譯。不知怎的,跟蹤器變量是可訪問的,但它的實例不是......任何Java專家都潛伏着一些光明?

+0

好的,我會發布main.xml – mpeerman 2012-03-08 23:56:57

+0

好吧,現在發佈 – mpeerman 2012-03-09 00:00:49

+0

你可以嘗試宣佈跟蹤器保護? – 2012-03-09 00:04:27

1

無論tracker是什麼,它都沒有被初始化。我看到你有一個擴展的基類,所以要確保在超類中正確設置了tracker。這意味着在構造函數或super.onCreate()

+0

跟蹤器初始化基礎活動我已更新問題以包含基類 – mpeerman 2012-03-08 23:56:31