2011-06-18 56 views
0

有人可以幫助我在這個TabHost的例子嗎? 我的問題是,當我試圖運行應用程序 我得到空指針異常。Tabhost空指針異常

這裏是代碼,如果有人需要看看。

public class TabBarExample extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     /** 
     * TabHost will have Tabs 
     **/ 
     TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); 

     /** TabSpec used to create a new tab. 
     * By using TabSpec only we can able to setContent to the tab. 
     * By using TabSpec setIndicator() we can set name to tab. 
     **/ 
     TabHost.TabSpec spec1, spec2; 
     spec1 = tabHost.newTabSpec("tab_id_1").setIndicator("Tab One").setContent(new Intent().setClass(this, FirstTab.class)); 
     spec2 = tabHost.newTabSpec("tab_id_2").setIndicator("Tab Two").setContent(new Intent().setClass(this, SecondTab.class)); 

     /** 
     * create intent of each tab pressed 
     **/ 
     //Intent intent1 = new Intent().setClass(this, FirstTab.class); 
     //Intent intent2 = new Intent().setClass(this, SecondTab.class); 

     /** 
     * add the created tab to the tab host for display 
     **/ 
     // I am getting error at the following line 
     tabHost.addTab(spec1); 
     tabHost.addTab(spec2); 
    } 
} 

任何人以任何方式協助或指向我的方向將不勝感激。 問候 西拉

EDIT-- 這裏是錯誤的logcat的觀點我得到

06-18 23:18:30.547: ERROR/AndroidRuntime(1404): FATAL EXCEPTION: main 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.moonlight.tabbarexample/com.moonlight.tabbarexample.TabBarExample}: java.lang.NullPointerException 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.app.ActivityThread.access$1500(ActivityThread.java:132) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.os.Looper.loop(Looper.java:143) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.app.ActivityThread.main(ActivityThread.java:4196) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at java.lang.reflect.Method.invoke(Method.java:507) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at dalvik.system.NativeStart.main(Native Method) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404): Caused by: java.lang.NullPointerException 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.widget.TabHost$ViewIdContentStrategy.<init>(TabHost.java:591) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.widget.TabHost$ViewIdContentStrategy.<init>(TabHost.java:586) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.widget.TabHost$TabSpec.setContent(TabHost.java:441) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at com.moonlight.tabbarexample.TabBarExample.onCreate(TabBarExample.java:26) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780) 
06-18 23:18:30.547: ERROR/AndroidRuntime(1404):  ... 11 more 
06-18 23:20:06.984: ERROR/SettingsAppWidhetProvider(14282): level1 = 100.0 

感謝 西拉

EDIT 2 - 這裏是main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="5dip"> 
     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 
     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:padding="5dip" /> 

    </LinearLayout> 
</TabHost> 

這是TabbarExample清單

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.moonlight.tabbarexample" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="7" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

     <activity android:name=".TabBarExample" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 
</manifest> 

這裏是Firsttab.java

package com.moonlight.tabbarexample; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class FirstTab extends Activity{ 
    public void onCreate (Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     /* First Tab Content */ 
     TextView textView = new TextView(this); 
     textView.setText("First Tab"); 
     setContentView(textView); 
    } 

} 

最後一個SeconTab.java

package com.moonlight.tabbarexample; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class SecondTab extends Activity{ 
    public void onCreate (Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     /* First Tab Content */ 
     TextView textView = new TextView(this); 
     textView.setText("Second Tab"); 
     setContentView(textView); 
    } 

} 

謝謝你們, pleaes healp,我焦急地等待着。 此致敬禮。 西拉

編輯3 ---

我已經添加了這些下面一行到我的清單文件

<activity android:name=".FirstTab"/> 
    <activity android:name=".SecondTab"/> 

,但我仍然得到同樣的錯誤:(

這是行在我的主要活動創建方法,我得到這個錯誤

/** 
     * add the created tab to the tab host for display 
     **/ 
     tabHost.addTab(spec1); 
     tabHost.addTab(spec2); 

感謝 西拉

+0

在哪條線發生此異常?換句話說,請複製堆棧跟蹤。 –

+0

嗨,我剛剛添加了我的代碼的Logcat視圖。 tx – hisheeraz

+1

你可以複製你的main.xml。另外請確保您已在清單文件中正確創建並定義了FirstTab和SecondTab活動。 – mkso

回答

1

首先,定義了兩個選項卡的活動中您的清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.moonlight.tabbarexample" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="7" /> 

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".FirstTab" /> 
    <activity android:name=".SecondTab" /> 
    <activity android:name=".TabBarExample" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 
</manifest> 

最後,改變

public class TabBarExample extends Activity { 

public class TabBarExample extends TabActivity { 

類的聲明你的標籤活動就好了。

+0

\t \t 添加這些行後,我仍然收到相同的錯誤 – hisheeraz

+0

請確保您使用Android名稱與「。」?我注意到你的評論不包括他們。 –

+0

是的,我已經嘗試過,仍然沒有運氣 – hisheeraz

0

我只是在OnCreate事件

mlam=new LocalActivityManager(this,true); 
     setContentView(R.layout.main_window); 

     TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); 
     mlam.dispatchCreate(savedInstanceState); 
     tabHost.setup(mlam); 
     TabSpec inboxSpec = tabHost.newTabSpec(INBOX_SPEC); 
     inboxSpec.setIndicator(INBOX_SPEC, getResources().getDrawable(R.drawable.icon_inbox)); 
     Intent inboxIntent = new Intent(this, InboxActivity.class); 
     inboxSpec.setContent(inboxIntent); 
     TabSpec outboxSpec = tabHost.newTabSpec(OUTBOX_SPEC); 
     outboxSpec.setIndicator(OUTBOX_SPEC, getResources().getDrawable(R.drawable.icon_outbox)); 
     Intent outboxIntent = new Intent(this, OutboxActivity.class); 
     outboxSpec.setContent(outboxIntent); 
     TabSpec profileSpec = tabHost.newTabSpec(PROFILE_SPEC); 
     profileSpec.setIndicator(PROFILE_SPEC, getResources().getDrawable(R.drawable.icon_profile)); 
     Intent profileIntent = new Intent(this, ProfileActivity.class); 
     profileSpec.setContent(profileIntent); 
     tabHost.addTab(inboxSpec); 
     tabHost.addTab(outboxSpec); 
     tabHost.addTab(profileSpec); 

那麼問題已經解決設置
mlam=new LocalActivityManager(this,true);

,而不是

  mlam=new LocalActivityManager(this,false); 

。不需要延伸作爲tabactivity