开发者

NullPointerException thrown in Eclipse when trying to open Android XML view?

开发者 https://www.devze.com 2023-02-04 12:06 出处:网络
Here is the exception: java.lang.NullPointerException at android.widget.TextView.setTextColor(TextView.java:1787)

Here is the exception:

java.lang.NullPointerException
at android.widget.TextView.setTextColor(TextView.java:1787)
at android.widget.TabHost$LabelIndicatorStrategy.createIndicatorView(TabHost.java:521)
at android.widget.TabHost.addTab(TabHost.java:204)
at com.android.layoutlib.bridge.Bridge.setupTabHost(Bridge.java:880)
at com.android.layoutlib.bridge.Bridge.postInflateProcess(Bridge.java:807)
at com.android.layoutlib.bridge.Bridge.postInflateProcess(Bridge.java:813)
at com.android.layoutlib.bridge.Bridge.computeLayout(Bridge.java:401)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.computeLayout(Unknown Source)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(Unknown Source)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(Unknown Source)
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.activated(Unknown Source)
at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditor.pageChange(Unknown Sourc开发者_如何学Pythone)
at org.eclipse.ui.part.MultiPageEditorPart$2.widgetSelected(MultiPageEditorPart.java:290)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061)
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:2743)
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1429)
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:257)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
at org.eclipse.equinox.launcher.Main.run(Main.java:1407)

Here is the main.xml file it's associated with:

<?xml version="1.0" encoding="utf-8"?>
<TabHost
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:id="@android:id/tabhost">

  <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="5dp">
  <TabWidget 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@android:id/tabs" />
    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <include layout="@layout/basic_tab" />
        <include layout="@layout/advanced_tab" />

    </FrameLayout>
  </LinearLayout>
</TabHost>

Both the include files work individually just fine. But when in a tab layout, this error occurs. Any fixes?

Here is the code:

import android.app.TabActivity;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;

import com.mohit.geo2do.R;

public class TaskEdit extends TabActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit_task);

        Resources res = getResources();
        TabHost host = getTabHost();

        host.addTab(host.newTabSpec("basic")
            .setIndicator("Basic", res.getDrawable(android.R.drawable.ic_menu_edit))
            .setContent(R.layout.basic_tab));
        host.addTab(host.newTabSpec("advanced")
            .setIndicator("Advanced", res.getDrawable(android.R.drawable.ic_menu_manage))
            .setContent(R.layout.advanced_tab));

        host.setCurrentTab(0);
    }
}

And here are the xml files, advanced_tab:

<?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"
  android:id="@+id/advanced_tab_layout">

  <TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" 
    android:text="Notify me:"
    android:textColor="#FFFFFF"
    android:textStyle="bold" 
  />

  <CheckBox 
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
       android:id="@+id/task_due" 
       android:text="when task is due"
       android:textColor="#FFFFFF"
       android:textStyle="bold" 
       android:paddingTop="5dip"
   />

   <CheckBox 
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
       android:id="@+id/task_overdue" 
       android:text="when task is overdue"
       android:textColor="#FFFFFF"
       android:textStyle="bold" 
       android:paddingTop="5dip"
   /> 

   <CheckBox 
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
       android:id="@+id/task_datetime" 
       android:text="at"
       android:textColor="#FFFFFF"
       android:textStyle="bold" 
       android:paddingTop="5dip"
   />

   <TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" 
    android:text="Calendar:"
    android:textColor="#FFFFFF"
    android:textStyle="bold" 
    android:paddingTop="5dip"
    />

   <CheckBox 
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
       android:id="@+id/task_calendar" 
       android:text="Create a calendar event"
       android:textColor="#FFFFFF"
       android:textStyle="bold" 
       android:paddingTop="5dip"
   />

</LinearLayout>

And basic_tab.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"
android:id="@+id/basic_tab_layout">
<TextView 
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_alignParentTop="true"
   android:text="Title:"
   android:textColor="#FFFFFF"
   android:textStyle="bold" 
   android:paddingTop="5dip"
/>

<EditText
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/title"
   android:hint="Name of the task..."
/>  

<TextView
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:text="Importance:"
   android:textColor="#FFFFFF"
   android:textStyle="bold"
   android:paddingTop="10dip"
/>

<RadioGroup 
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="horizontal"
    android:id="@+id/importance_grp">

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="High" 
        android:paddingRight="25dip"
    />
    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Medium" 
        android:checked="true"
        android:paddingRight="25dip"
    />
    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Low" 
    />

</RadioGroup>

<TextView
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:text="Due Date:"
   android:textColor="#FFFFFF"
   android:textStyle="bold"
   android:paddingTop="10dip"
/>

<Spinner
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/due_date" 
   android:prompt="@string/due_date_prompt"
   android:entries="@array/due_date_entries"
/>

    <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="Notes:"
       android:textColor="#FFFFFF"
       android:textStyle="bold"
       android:paddingTop="10dip"
    />

    <EditText
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:id="@+id/notes"
        android:hint="Notes..."
        android:minLines="4" 
    />

</LinearLayout>

UPDATE:

Apparently:

host.addTab(host.newTabSpec("advanced")
        .setIndicator("Advanced", res.getDrawable(android.R.drawable.ic_menu_manage))
        .setContent(R.layout.advanced_tab));

Doesn't take a layout xml file to be it's content. It should be:

host.addTab(host.newTabSpec("advanced")
        .setIndicator("Advanced", res.getDrawable(android.R.drawable.ic_menu_manage))
        .setContent(R.id.advanced_tab_layout));

Where setContent takes an id. I still get that error, but on the emulator, the tabs actually display, BUT WITH NO CONTENT!


The exception you are listing is a bug in the layout editor itself. When running the Android layout code, we were not properly initializing the SDK version, which meant some version-conditional code in the TabWidget would get run (which fails because it's not actually running in the version it thinks). We're fixing this in ADT 10 (along with various other rendering/previewing issues for tabs.)

(This is the changeset which looks up the right version to pass to the renderer)


Well, I just cleaned the project and deleted the edit_task.xml file and recreated it. It works fine now.


finally a workaround exists, install the Android 3.0 Preview SDK, you can set the Render Target in the layout editor to 3.0.

More info here-> http://code.google.com/p/android/issues/detail?id=13092

0

精彩评论

暂无评论...
验证码 换一张
取 消