2011-06-18 5 views
0

Quelqu'un peut-il m'aider s'il vous plaît dans cet exemple de TabHost? Le problème que j'ai, c'est quand j'essaye d'exécuter l'application je reçois l'exception Pointeur Null.Tabhost Null Pointer Exception

Voici le code si quelqu'un doit jeter un coup d'œil.

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

Toute personne pour aider de quelque façon que ce soit ou me diriger vers une direction sera appréciée. Cordialement Shiraz

EDIT-- ici est la vue LogCat de l'erreur que je reçois

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 

Merci Shiraz

EDIT 2 - EST ICI 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> 

Voici le manifeste 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> 

Et voici 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); 
    } 

} 

dernier 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); 
    } 

} 

Merci les gars, pleaes healp, j'attends avec impatience. Cordialement. Shiraz

EDIT 3 ---

J'ai ajouté ces lignes suivantes à mon dossier manifeste

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

mais je reçois toujours la même erreur :(

c'est la ligne dans mon activité principale surCréer methid où j'obtiens cette erreur

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

grâce shiraz

+0

À quelle ligne cette exception se produit-elle? En d'autres termes, veuillez copier la pile. –

+0

Salut, je viens d'ajouter la vue Logcat de mon code. tx – hisheeraz

+1

pouvez-vous copier votre main.xml. Assurez-vous également que les activités FirstTab et SecondTab sont créées et définies correctement dans le fichier manifeste. – mkso

Répondre

1

D'abord, définir les activités pour les deux onglets dans votre manifeste:

<?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> 

Enfin, le changement

public class TabBarExample extends Activity { 

à

public class TabBarExample extends TabActivity { 

Les déclarations de classe pour vos activités sur les onglets vont bien.

+0

\t \t après avoir ajouté ces lignes im ayant toujours la même erreur – hisheeraz

+0

Assurez-vous d'avoir utilisé le nom Android avec le "."? Je remarque que votre commentaire ne les inclut pas. –

+0

oui j'ai essayé cela aussi, toujours pas de chance – hisheeraz

0

je viens de définir
mlam=new LocalActivityManager(this,true);

au lieu de

  mlam=new LocalActivityManager(this,false); 

en cas 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); 

le problème a été résolu. pas besoin de s'étendre en tant que tabactivité