Listview和光标适配器出错

时间:2013-12-03 16:50:59

标签: android listview

我正在尝试使用自定义适配器和列表视图。目前我正在尝试填充列表视图,但我收到了这个错误,我已经坚持了很长时间。如果有人有时间帮助我,我真的可以使用一些指导。非常感谢。

         weatherActivity.xml
            ---------------------
            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <TextView
                    android:id="@+id/weather_day"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentTop="true"
                    android:layout_centerHorizontal="true"
                    android:text="weather day"
                    android:textAppearance="?android:attr/textAppearanceLarge" />

                <TextView
                    android:id="@+id/weather_desc"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/weather_day"
                    android:layout_centerHorizontal="true"
                    android:text="weather desc"
                    android:textAppearance="?android:attr/textAppearanceMedium" />

                <TextView
                    android:id="@+id/weather_wind_dir"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignRight="@+id/weather_pic"
                    android:layout_centerVertical="true"
                    android:text="weather_wind_dir"
                    android:textAppearance="?android:attr/textAppearanceSmall" />

                <ListView
                    android:id="@+id/weather_list"
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentLeft="true" >
                </ListView>

                <ImageView
                    android:id="@+id/weather_pic"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/weather_desc"
                    android:layout_centerHorizontal="true"
                    android:src="@drawable/butterfly" />

                <TextView
                    android:id="@+id/weather_wind_spd"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignBaseline="@+id/weather_wind_dir"
                    android:layout_alignBottom="@+id/weather_wind_dir"
                    android:layout_alignLeft="@+id/weather_pic"
                    android:text="weather_wind_spd"
                    android:textAppearance="?android:attr/textAppearanceSmall" />

            </RelativeLayout>

            -------

            weather_list_row.xml

            <?xml version="1.0" encoding="utf-8"?>
            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="50dp"
                android:orientation="horizontal"
                android:padding="5dip" >

                <TextView
                    android:id="@+id/we_title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text=""
                    android:textStyle="bold"
                    android:typeface="sans" />

            </RelativeLayout>

        -------------
    import android.app.Activity;
    import android.content.Context;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ListView;

    public class weatherActivity extends Activity {
        Context context = this;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.weather_activity);

            Cursor cursor = context.getContentResolver().query(ContentProvider.WEATHER_TEMPERATURES_URI, null, null, null, null);
            weatherCustomAdapter WCA = new weatherCustomAdapter(this, cursor, false);

            ListView lv = (ListView) findViewById(R.id.weather_list);
            lv.setAdapter(WCA);
        }
    }


    -------

        public class weatherCustomAdapter extends CursorAdapter 
        {
            private LayoutInflater inflater;
            private Context context;
            private ViewHolder holder;

            public static class ViewHolder {
                public TextView desc;
                public TextView title;
            }

            public weatherCustomAdapter(Context context, Cursor c, boolean autoRequery) {
                super(context, c, autoRequery);
                // TODO Auto-generated constructor stub
            }

            @Override
            public void bindView(View view, Context context, Cursor cursor) {
                // TODO Auto-generated method stub
                Log.d("Weather", "We're at bindView!");
                holder = (ViewHolder) view.getTag();

                int descIndex = cursor.getColumnIndex(WeatherTemperatures.MAIN_DESC);
                String desc = cursor.getString(descIndex);

                Log.d("Weather", "We're at bindView1!");
                holder.desc.setText(desc);
            }

            @Override
            public View newView(Context context, Cursor cursor, ViewGroup parent) {
                Log.d("Weather", "We're at newView!");
                View view = inflater.inflate(R.layout.weather_list_row, parent, false);

                Log.d("Weather", "We're at newView1!");
                holder = new ViewHolder();
                holder.desc = (TextView) view.findViewById(R.id.we_title);
                holder.desc.setBackgroundColor(Color.argb(100, 0, 0, 0));
                holder.desc.setTextColor(Color.WHITE); 
                Log.d("Weather", "We're at newView2!");
                view.setTag(holder);
                Log.d("Weather", "We're at newView3!");
                return view;
            }
        }

    ------------

And finally, the error


12-03 18:47:20.234: E/AndroidRuntime(11533): FATAL EXCEPTION: main
12-03 18:47:20.234: E/AndroidRuntime(11533): Process: com.a_v1, PID: 11533
12-03 18:47:20.234: E/AndroidRuntime(11533): java.lang.NullPointerException
12-03 18:47:20.234: E/AndroidRuntime(11533):    at com.a_v1.weatherCustomAdapter.newView(weatherCustomAdapter.java:48)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:252)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.AbsListView.obtainView(AbsListView.java:2263)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.ListView.makeAndAddView(ListView.java:1790)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.ListView.fillDown(ListView.java:691)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.ListView.fillFromTop(ListView.java:752)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.ListView.layoutChildren(ListView.java:1630)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.AbsListView.onLayout(AbsListView.java:2091)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.View.layout(View.java:14785)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.View.layout(View.java:14785)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.View.layout(View.java:14785)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.View.layout(View.java:14785)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.View.layout(View.java:14785)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1985)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1742)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5582)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.Choreographer.doFrame(Choreographer.java:532)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.os.Handler.handleCallback(Handler.java:733)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.os.Handler.dispatchMessage(Handler.java:95)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.os.Looper.loop(Looper.java:137)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at android.app.ActivityThread.main(ActivityThread.java:4998)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at java.lang.reflect.Method.invokeNative(Native Method)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at java.lang.reflect.Method.invoke(Method.java:515)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
12-03 18:47:20.234: E/AndroidRuntime(11533):    at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

您尚未初始化inflater。你在那里得到空指针异常。初始化inflater并检查它是否有效。

您可以在自定义适配器的constructor中初始化它

public weatherCustomAdapter(Context context, Cursor c, boolean autoRequery) {
                super(context, c, autoRequery);
                // TODO Auto-generated constructor stub
                this.context = context;
                inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }
相关问题