2011-12-09 98 views
2

我有一個數據庫聯繫application.And我想顯示我的聯繫方式在另一個意圖,當我點擊列表視圖中的一個聯繫人。 這裏是我的.java代碼:`java空指針異常數據庫

  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"))); 

    } 

    } 


    } 

`

我得到:`

 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,因此具有null值當您嘗試在onListItemClick方法中訪問它。我想你會得到你想要的結果,如果你改變了聲明實例變量adapter(一個在頂部)爲SimpleCursorAdapter,而不是一個ListAdapter,然後從改變這一行:

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

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

謝謝它的工作 – jonny