android listview出了问题

时间:2012-01-31 12:11:02

标签: android database listview nullpointerexception

当用户登录时会出现这些错误,然后在下一个活动中,ListView需要从数据库中读取所有标题并显示它们:

logcat的:

01-30 12:52:57.405: E/AndroidRuntime(2905): FATAL EXCEPTION: main
01-30 12:52:57.405: E/AndroidRuntime(2905): java.lang.NullPointerException
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.AbsListView.obtainView(AbsListView.java:1294)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1198)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.ListView.onMeasure(ListView.java:1109)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.view.View.measure(View.java:8171)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.RelativeLayout.measureChild(RelativeLayout.java:563)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:378)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.view.View.measure(View.java:8171)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.view.View.measure(View.java:8171)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.view.View.measure(View.java:8171)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.view.View.measure(View.java:8171)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.os.Looper.loop(Looper.java:123)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at android.app.ActivityThread.main(ActivityThread.java:4627)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at java.lang.reflect.Method.invokeNative(Native Method)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at java.lang.reflect.Method.invoke(Method.java:521)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-30 12:52:57.405: E/AndroidRuntime(2905):     at dalvik.system.NativeStart.main(Native Method)

我的问题出在某处:

package com.todo;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class Todo extends ListActivity implements OnClickListener{
    private Button add,delete,search,exit;
    private Intent intent;
    private ListView listView;
    DatabaseHelper db;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        db=new DatabaseHelper(this);
        db.open();
        setupViews();
        db.close();

    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.main_add_btn:
            //open activity to add item
            intent=new Intent(this, InsertItem.class);
            startActivity(intent);

            break;
        case R.id.main_delete_btn:
            //delete item
            break;
        case R.id.main_exit_btn:
            finish();
            break;

        }

    }
    private void setupViews(){
        add=(Button) findViewById(R.id.main_add_btn);
        delete=(Button) findViewById(R.id.main_delete_btn);
        search=(Button) findViewById(R.id.main_search_btn);
        exit=(Button) findViewById(R.id.main_exit_btn);
        add.setOnClickListener(this);
        delete.setOnClickListener(this);
        search.setOnClickListener(this);
        exit.setOnClickListener(this);
        listView=getListView();
//      int l=(int) intent.getLongExtra("userID", -1);      
        Log.v("test","tuja");
        ;
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,db.GetAllItems(1));
//      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
//              android.R.layout.simple_list_item_1, db.GetAllItems(1));
        Log.v("test","tuja2");
        setListAdapter(adapter);

    }
}

和GetAllItems函数:

public String[] GetAllItems(int userID) {
        Cursor cur = database.query(true, "todoItems",
                new String[] { "title" }, "userID" + "=" + userID, null, null,
                null, null, null);
        int i;
        String arr[] = new String[40];
        i = 0;

        cur.moveToFirst();
        while (cur.isAfterLast() == false) {
            arr[i] = cur.getString(cur.getColumnIndex("title"));
            Log.v("test", arr[i]);
            i++;
            cur.moveToNext();
        }
        return arr;
    }

我试过但我找不到我错的地方。

1 个答案:

答案 0 :(得分:0)

在代码setContentView(R.layout.main);中删除此行,然后运行。