简体   繁体   English

自定义适配器上的nullpointer异常

[英]nullpointer exception on custom adapter

I have created a project to display list with custom row layout. 我创建了一个项目来显示具有自定义行布局的列表。 Upon clicking on the list item, calling an activity which retrieves data from sqlite and display in listview using custom row. 单击列表项后,调用一个活动,该活动从sqlite检索数据并使用自定义行显示在listview中。 But, I am getting null pointer exception when doing setadapter in 但是,我在执行setadapter时遇到空指针异常

DisplayCards.java DisplayCards.java

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class DisplayCards extends Activity{


        private Divyadesamdb dbHelper;

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

            dbHelper = new Divyadesamdb(this);
            dbHelper.open();

            // Clean all data
            dbHelper.deleteAllPasurams();
            // Add some data
            dbHelper.insertPasurams();

            // Generate ListView from SQLite Database
            displayListView();

        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

        private void displayListView() {
            String category = null;
            String starting = "25";
            String ending = "30";
            int rowsFound = 0;
            Cursor cursor = dbHelper.fetchAllPasurams(category,starting,ending);
            /*
             * How many rows returned from the query
             */
            rowsFound = cursor.getCount();
            Log.d("VC", "Query returned "+rowsFound+" rows.");
            // the desired columns to be bound
            String[] columns = new String[] { Divyadesamdb.PASURAMS_COLUMN_PAASURAMNUMBER,
                    Divyadesamdb.PASURAMS_COLUMN_AAYIRAM, Divyadesamdb.PASURAMS_COLUMN_AZHWAAR,
                    Divyadesamdb.PASURAMS_COLUMN_CATEGORY, Divyadesamdb.PASURAMS_COLUMN_MANGALASASANAMON,
                    Divyadesamdb.PASURAMS_COLUMN_PAASURAM_EN_STR, Divyadesamdb.PASURAMS_COLUMN_SUBCATEGORY,
                    Divyadesamdb.PASURAMS_COLUMN_TITLE, Divyadesamdb.PASURAMS_COLUMN_TITLENUMBER };



            // the XML defined views which the data will be bound to
            int[] to = new int[] { R.id.tvPaasuramNumber, R.id.tvAayiram, R.id.tvAzhwaar,
                    R.id.tvCategory, R.id.tvMangalasasanamOn, R.id.tvPaasuram,
                    R.id.tvSubCategory, R.id.tvTitle, R.id.tvtvTitleNumber};
Log.d("VC","Just before creating dataAdapter");
            // create the adapter using the cursor pointing to the desired data
            // as well as the layout information
            MyCursorAdapter dataAdapter = new MyCursorAdapter(this,
                    R.layout.paasuram_single_item, cursor, columns, to, 0);
            Log.d("VC","Just after creating dataAdapter");
            ListView listView = (ListView) findViewById(R.id.listView1);
            // Assign adapter to ListView
            Log.d("VC","created listView");
            int myCount = dataAdapter.getCount();
            Log.d("VC","got data from dataAdapter "+myCount);
            //listView.getAdapter();
            listView.setAdapter(dataAdapter);
            Log.d("VC","completed setadapter dataAdapter");
        }

        // extend the SimpleCursorAdapter to create a custom class where we
        // can override the getView to change the row colors
        private class MyCursorAdapter extends SimpleCursorAdapter {

            public MyCursorAdapter(Context context, int layout, Cursor c,
                    String[] from, int[] to, int flags) {
                super(context, layout, c, from, to, flags);
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {

                // get reference to the row
                View view = super.getView(position, convertView, parent);
                // check for odd or even to set alternate colors to the row
                // background
                if (position % 2 == 0) {
                    view.setBackgroundColor(Color.rgb(238, 233, 233));
                } else {
                    view.setBackgroundColor(Color.rgb(255, 255, 255));
                }
                return view;
            }

        }

    }

paasuram_single_item.xml paasuram_single_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/mybackground"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/ivAzhwaar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="false"
        android:layout_margin="10dp"
        android:contentDescription="@string/Azhwaar"
        android:padding="5dp"
        android:src="@drawable/nammalwar" />

    <TextView
        android:id="@+id/tvtvTitleNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/ivAzhwaar"
        android:layout_toRightOf="@+id/ivAzhwaar"
        android:text="TitleNumber"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/tvHyphan1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/tvtvTitleNumber"
        android:layout_alignBottom="@+id/tvtvTitleNumber"
        android:layout_toRightOf="@+id/tvtvTitleNumber"
        android:text=" "
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignBaseline="@+id/tvHyphan1"
        android:layout_alignBottom="@+id/tvHyphan1"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@+id/tvHyphan1"
        android:text="Title"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/tvAayiram"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/tvtvTitleNumber"
        android:layout_below="@+id/tvtvTitleNumber"
        android:text="Aayiram"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/tvHyphan2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tvtvTitleNumber"
        android:layout_toRightOf="@+id/tvAayiram"
        android:text=" - "
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/tvCategory"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/tvHyphan2"
        android:layout_alignBottom="@+id/tvHyphan2"
        android:layout_toRightOf="@+id/tvHyphan2"
        android:text="Category"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/tvHyphan3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/tvCategory"
        android:layout_alignBottom="@+id/tvCategory"
        android:layout_toRightOf="@+id/tvCategory"
        android:text=" - "
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/tvSubCategory"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/tvHyphan3"
        android:layout_alignBottom="@+id/tvHyphan3"
        android:layout_toRightOf="@+id/tvHyphan3"
        android:text="SubCategory"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/tvPaasuram"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/tvAayiram"
        android:layout_below="@+id/tvAayiram"
        android:padding="5dp"
        android:text="paasuram"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/tvPaasuramNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/tvPaasuram"
        android:layout_alignBottom="@+id/tvPaasuram"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:text="PaasuramNumber"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/tvAzhwaar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/tvMangalasasanamOn"
        android:layout_alignBottom="@+id/tvMangalasasanamOn"
        android:layout_alignLeft="@+id/tvPaasuram"
        android:text="Azhwaar"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/tvMangalasasanamOn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/tvCategory"
        android:layout_below="@+id/tvPaasuram"
        android:layout_centerHorizontal="true"
        android:text="MangalasasanamOn"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

paasuram_list_fragment.xml paasuram_list_fragment.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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >



    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>



</RelativeLayout>

NPE is happening on DisplayCards.java NPE正在DisplayCards.java上发生

listView.setAdapter(dataAdapter);

Able to get the correct count in dataAdapter 能够在dataAdapter中获得正确的计数

any help is appreciated. 任何帮助表示赞赏。

activity_main.xml中没有id为listView1元素,这就是listView为null的原因。

Change 更改

ListView listView = (ListView) findViewById(R.id.listView1);

into

ListView listView = (ListView) findViewById(android.R.id.list);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM