0

잘 작동하는 다른 활동의 목록에서 항목을 클릭하면 책 데이터베이스의 세부 정보를 표시하는 데이 코드가 있습니다. 이 코드를 사용했습니다. 이렇게 ... 하지만 작동하지 않았다! 누군가 내 코드에 어떤 문제가 있는지 말해 줄 수 있습니까 ??? 내가 항목을 클릭하면 세부 활동으로 이동하고 선택한 책의 나머지 세부 정보를 표시합니다. ,,, 여기 viewList의 항목을 클릭하십시오. 데이터베이스의 데이터로 새로운 활동 열기 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(); 
} 


} 

입니다! 당신을 감사합니다! :(도움이 내가 그것을 실행할 때받은 로그 캣은 제발

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) 
+0

정의하십시오'는 work'하지 않았다? –

+0

@Lawrence Choy 내가 목록에있는 항목을 클릭하면 응용 프로그램이 멈추고 종료됩니다. –

+0

게시 로그 오류 메시지 .. –

답변

0

당신은 onCreate 함수에서 displayData()해야합니다, 즉

+0

나는 그것을 시도하고 같은 문제가 나타납니다 : ( –

0

문제는 여기에 지적되어 사용자 코드에서

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(); 
} 

} 
+0

나는 이것을 시도했습니다. 항목을 클릭하면 응용 프로그램이 멈추지 않습니다.하지만 아무 것도하지 않습니다! 다른 활동을 시작하고보고 싶습니다. –

+0

데이터베이스의 나머지 데이터는 'displayData()'메소드의 마지막 코드에서도 모든 변경을가 했습니까?'discontpt'가 여전히 null이고 코드가'return; '인 것처럼 보이기 때문에 작동하지 않습니다 – madlymad

+0

예 그런 다음 다시 작동을 멈췄습니다 !! :( –

관련 문제