簡體   English   中英

單擊viewList中的項目。用數據庫android中的數據打開新活動

[英]click on item in viewList .. open new activity with data from database android

當我在另一個活動中單擊列表中的項目時,我有此代碼來顯示我的圖書數據庫的詳細信息,該工作正常..我使用此代碼進行了..但沒有用! 有人可以告訴我我的代碼有什么問題嗎? 我想要當我單擊項目時轉到詳細信息活動並顯示所選書的其余詳細信息。 請幫助:(!謝謝!

package com.example.test;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.TextView;

public class BookDetails extends Activity {

protected TextView name;
protected TextView author;
protected TextView isbn;
protected TextView copy;
protected TextView info;
protected int bookId;
private DbHelper mHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.book_details);

    bookId = getIntent().getIntExtra("bID", 0);
    SQLiteDatabase db = mHelper.getWritableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM "+ DbHelper.TABLE_NAME, null);

    if (cursor.getCount() == 1)
    {
        cursor.moveToFirst();

        name = (TextView) findViewById(R.id.name);
        name.setText(cursor.getString(cursor.getColumnIndex("KEY_NAME")));

        author = (TextView) findViewById(R.id.author);
        author.setText(cursor.getString(cursor.getColumnIndex("KEY_AUTHOR")));

        isbn = (TextView) findViewById(R.id.isbn);
        isbn.setText(cursor.getString(cursor.getColumnIndex("KEY_ISBN")));

        copy = (TextView) findViewById(R.id.copy);
        copy.setText(cursor.getString(cursor.getColumnIndex("KEY_COPIES")));

        info = (TextView) findViewById(R.id.info);
        info.setText(cursor.getString(cursor.getColumnIndex("KEY_INFO")));

    }

}

}

這是DisplayActivity.java

 package com.example.test;


 import java.util.ArrayList;

 import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.AdapterView.OnItemLongClickListener;
 import android.widget.ListAdapter;
 import android.widget.ListView;
 import android.widget.Toast;

 public class DisplayActivity extends Activity {

private DbHelper mHelper;
private SQLiteDatabase dataBase;
private ListAdapter adapter;
private ArrayList<String> bookId = new ArrayList<String>();
private ArrayList<String> book_Name = new ArrayList<String>();
private ArrayList<String> book_Author = new ArrayList<String>();
private ArrayList<String> book_Info = new ArrayList<String>();
private ArrayList<String> book_Isbn = new ArrayList<String>();
private ArrayList<String> book_Copy = new ArrayList<String>();
public static String bNAME="bname";
public static String bAUTHOR="bauthor";
public static String bISBN="bisbn";
public static String bCOPY="bcopy";
public static String bINFO="binfo";
public static String bID="ID";
private ListView userList;
private AlertDialog.Builder build;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display_activity);

    userList = (ListView) findViewById(R.id.List);

    mHelper = new DbHelper(this);
       userList.setOnItemClickListener(new OnItemClickListener() {
              public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

                  Intent intent = new Intent(view.getContext(),BookDetails.class);
                Cursor cursor = (Cursor) adapter.getItem(position);
                intent.putExtra("bID", cursor.getInt(cursor.getColumnIndex("KEY_ID")));
                startActivity(intent);
              }
            });}

@Override
protected void onResume() {
    displayData();
    super.onResume();
}

/**
 * displays data from SQLite
 */
private void displayData() {
    dataBase = mHelper.getWritableDatabase();
    Cursor mCursor = dataBase.rawQuery("SELECT * FROM "
            + DbHelper.TABLE_NAME, null);

    bookId.clear();
    book_Name.clear();
    book_Author.clear();
    book_Isbn.clear();
    book_Copy.clear();
    book_Info.clear();
    if (mCursor.moveToFirst()) {
        do {
            bookId.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ID)));
            book_Name.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_NAME)));
            book_Author.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_AUTHOR)));
            book_Isbn.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ISBN)));
            book_Copy.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_COPIES)));
            book_Info.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_INFO)));

        } while (mCursor.moveToNext());
    }
    DisplayAdapter disadpt = new DisplayAdapter(DisplayActivity.this,bookId, book_Name);
    userList.setAdapter(disadpt);
    mCursor.close();
}


 }

這是我運行它時獲得的LogCat ,,,

11-25 03:02:52.878: D/dalvikvm(2734): GC_FOR_ALLOC freed 59K, 4% free 3150K/3272K, paused 40ms, total 44ms
11-25 03:02:52.978: I/Choreographer(2734): Skipped 46 frames!  The application may be doing too much work on its main thread.
11-25 03:02:53.038: D/gralloc_goldfish(2734): Emulator without GPU emulation detected.
11-25 03:02:55.768: D/AndroidRuntime(2734): Shutting down VM
11-25 03:02:55.768: W/dalvikvm(2734): threadid=1: thread exiting with uncaught exception (group=0xb4a4bb90)
11-25 03:02:55.818: E/AndroidRuntime(2734): FATAL EXCEPTION: main
11-25 03:02:55.818: E/AndroidRuntime(2734): Process: com.example.test, PID: 2734
11-25 03:02:55.818: E/AndroidRuntime(2734): java.lang.NullPointerException
11-25 03:02:55.818: E/AndroidRuntime(2734):     at com.example.test.DisplayActivity$1.onItemClick(DisplayActivity.java:58)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at android.widget.AdapterView.performItemClick(AdapterView.java:299)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at android.widget.AbsListView$3.run(AbsListView.java:3638)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at android.os.Handler.handleCallback(Handler.java:733)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at android.os.Handler.dispatchMessage(Handler.java:95)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at android.os.Looper.loop(Looper.java:137)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at android.app.ActivityThread.main(ActivityThread.java:4998)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at java.lang.reflect.Method.invokeNative(Native Method)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at java.lang.reflect.Method.invoke(Method.java:515)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
11-25 03:02:55.818: E/AndroidRuntime(2734):     at dalvik.system.NativeStart.main(Native Method)

您應該在onCreate函數中displayData() ,即

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display_activity);

    userList = (ListView) findViewById(R.id.List);  

    mHelper = new DbHelper(this);
     displayData();

       userList.setOnItemClickListener(new OnItemClickListener() {
              public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

                  Intent intent = new Intent(DisplayActivity.this,BookDetails.class);
                Cursor cursor = (Cursor) parent.getItem(position);
                intent.putExtra("bID", cursor.getInt(cursor.getColumnIndex("KEY_ID")));
                startActivity(intent);
              }
            });
}

問題在這里指出:

11-25 03:02:55.818: E/AndroidRuntime(2734): java.lang.NullPointerException
11-25 03:02:55.818: E/AndroidRuntime(2734):     at com.example.test.DisplayActivity$1.onItemClick(DisplayActivity.java:58)

從您的代碼中可以清楚地看到private ListAdapter adapter; 不在任何地方使用/初始化,而是初始化適配器DisplayAdapter disadpt = new DisplayAdapter(DisplayActivity.this,bookId, book_Name); 因此您可以更改適配器的減速度以使用正確的減速度。

DisplayActivity代碼:

public class DisplayActivity extends Activity {

private DbHelper mHelper;
private SQLiteDatabase dataBase;
private DisplayAdapter disadpt; // <--- one change here
private ArrayList<String> bookId = new ArrayList<String>();
private ArrayList<String> book_Name = new ArrayList<String>();
private ArrayList<String> book_Author = new ArrayList<String>();
private ArrayList<String> book_Info = new ArrayList<String>();
private ArrayList<String> book_Isbn = new ArrayList<String>();
private ArrayList<String> book_Copy = new ArrayList<String>();
public static String bNAME = "bname";
public static String bAUTHOR = "bauthor";
public static String bISBN = "bisbn";
public static String bCOPY = "bcopy";
public static String bINFO = "binfo";
public static String bID = "ID";
private ListView userList;
private AlertDialog.Builder build;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display_activity);

    userList = (ListView) findViewById(R.id.List);

    mHelper = new DbHelper(this);
    userList.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            if(disadpt == null) return; // avoid crashes if not initialized
            Intent intent = new Intent(DisplayActivity.this, BookDetails.class); // <-- better use activity context
            Cursor cursor = (Cursor) disadpt.getItem(position);
            intent.putExtra("bID", cursor.getInt(cursor.getColumnIndex(DbHelper.KEY_ID))); // <--- also this seems faulty you do not have any column named "KEY_ID"
            startActivity(intent);
        }
    });
}

@Override
protected void onResume() {
    displayData();
    super.onResume();
}

/**
 * displays data from SQLite
 */
private void displayData() {
    dataBase = mHelper.getWritableDatabase();
    Cursor mCursor = dataBase.rawQuery("SELECT * FROM "
            + DbHelper.TABLE_NAME, null);

    bookId.clear();
    book_Name.clear();
    book_Author.clear();
    book_Isbn.clear();
    book_Copy.clear();
    book_Info.clear();
    if (mCursor.moveToFirst()) {
        do {
            bookId.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ID)));
            book_Name.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_NAME)));
            book_Author.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_AUTHOR)));
            book_Isbn.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ISBN)));
            book_Copy.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_COPIES)));
            book_Info.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_INFO)));

        } while (mCursor.moveToNext());
    }
  // Another change here v
    disadpt = new DisplayAdapter(DisplayActivity.this, bookId, book_Name);
    userList.setAdapter(disadpt);
    mCursor.close();
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM