2011-12-09 2 views
2

데이터베이스 연락처 응용 프로그램이 있습니다. 목록보기에서 하나의 연락처를 클릭하면 다른 의도로 내 연락처 정보를 표시하려고합니다. 여기 내 된 .java 코드 :`java null 포인터 예외 데이터베이스

  package org.example.dbcontactconsole; 
      import android.app.ListActivity; 
      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.Button; 
      import android.widget.EditText; 
      import android.widget.ListAdapter; 
      import android.widget.ListView; 
      import android.widget.SimpleCursorAdapter; 
      import static android.provider.BaseColumns._ID; 

public class Search extends ListActivity { 

private static int[] TO = {R.id.rowid,R.id.name, R.id.mobilephone, R.id.email }; 
private static String[] FROM = {_ID,DbConstants.NAME, DbConstants.PHONE,DbConstants.EMAIL, }; 


    private Button sButton; 
private ListView lv1; 
private static SQLiteDatabase db; 
    private DbCreate contacts; 
    private Cursor cursor; 
    private EditText searchText; 
    protected ListAdapter adapter; 

protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.search); 
    searchText=(EditText)findViewById(R.id.searchText); 
    sButton=(Button)findViewById(R.id.searchButton); 
    sButton.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      showDatabaseContent(); 
       lv1 = getListView(); 
       lv1.setTextFilterEnabled(true); 
     } 
    }); 
} 
    private Cursor getContacts() { 
     db = contacts.getReadableDatabase(); 
     cursor = db.rawQuery("SELECT _id,name, phone, email FROM contactTest1 WHERE name LIKE ?", 
       new String[]{searchText.getText().toString()+"%"}); 
     startManagingCursor(cursor); 
     return cursor;} 

     public void showDatabaseContent(){ 
    contacts = new DbCreate(this); 
    try { 
     cursor = getContacts(); 
     showContacts(cursor); 
    } finally { 
     contacts.close(); 
     db.close(); 
    } 
} 

    private void showContacts(Cursor cursor) { 
    //set up data binding 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.item, cursor, FROM, TO); 
    setListAdapter(adapter); 
    } 
public void onListItemClick(ListView parent, View v, int position, long id) { 
    Intent abaintent = new Intent(this,Detalii.class); 
    Cursor cursor = (Cursor) adapter.getItem(position); 
    abaintent.putExtra("Contact_ID", cursor.getInt(cursor.getColumnIndex("_id"))); 
    startActivity(abaintent); 
    } 
    } 

Here is Detalii.java: 패키지 org.example.dbcontactconsole;

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

public class Detalii extends Activity 
      { 
protected TextView contactName; 
protected TextView contactPhone; 
protected TextView email; 
protected int contactId; 


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

contactId = getIntent().getIntExtra("Contact_ID",0); 
SQLiteDatabase db = (new DbCreate(this)).getWritableDatabase(); 
Cursor cursor = db.rawQuery("SELECT name,phone,email FROM contactTest1 WHERE _id=?",new String[]{""+contactId}); 

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

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



    contactPhone = (TextView) findViewById(R.id.phone); 
    contactPhone.setText(cursor.getString(cursor.getColumnIndex("phone"))); 



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

    } 

    } 


    } 

`

나는 점점 오전 : '당신이 시도 할 때 null의 값이 있도록

 java.lang.NullPointerException 

     at org.example.dbcontactconsole.Search.onListItemClick(Search.java:80) 
     at android.app.ListActivity$2.onItemClick(ListActivity.java:319) 
     at android.app.ActivityThread.main(ActivityThread.java:3683) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:507) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run 
     (ZygoteInit.java:839) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
     at dalvik.system.NativeStart.main(Native Method) 

`

답변

0

당신은, 변수 adapter을 인스턴스를 초기화하지 않습니다 onListItemClick 방법으로 액세스하십시오.

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.item, cursor, FROM, TO); 

에 : 난 당신이 (상단에 하나)이 선언을 인스턴스 변수 adapter을 변경하는 경우 대신 ListAdapterSimpleCursorAdapter 당신이 원하는 결과를 얻을 다음에서이 줄을 변경 것 같아요
adapter = new SimpleCursorAdapter(this, R.layout.item, cursor, FROM, TO); 
+0

감사합니다. – jonny