簡體   English   中英

在我的代碼中獲取nullpointer異常

[英]Getting nullpointer exception in my code

我正在制作聯系人列表應用程序。 我有一個名為“搜索”按鈕的按鈕,單擊該按鈕時,正在讀取文本框中編寫的名稱,並在此處搜索數據庫,這是我的代碼:

public class SearchResultsActivity extends Activity {

public DatabaseAdapter db;
public ArrayList<String> myList;
public ListView listview;
private TextView view;


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list);
    view = (TextView) findViewById(R.id.textView1);
    db = new DatabaseAdapter(this);
    myList = new ArrayList<String>();
    getSearchResults();
    //getAllContacts();
    printList();
}

public void getSearchResults(){
    db.open();
    db.getContactbyName(view.getText().toString());
    Cursor c = db.getContactbyName(view.getText().toString());
            if (c.moveToFirst()) {
        do {
            DisplayContact(c);

        } while (c.moveToNext());
    }

    db.close();

}

public void printList(){

    listview = (ListView)findViewById(R.id.contactcListView);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1, myList);

    listview.setAdapter(adapter);
}

public void getAllContacts() {
    db.open();
    Cursor c = db.getAllContacts();
    if (c.moveToFirst()) {
        do {
            DisplayContact(c);

        } while (c.moveToNext());
    }
    db.close();
}

public void DisplayContact(Cursor c) {

    String entry = "";
    // if you add another attribute to your table, you need to change 3 into x
    for (int i=1; i<5;i++){
        entry += c.getString(i) + "\n";
    }
    myList.add(entry);
}
}

在我的代碼中,getAllContacts()方法可以正常工作並打印所有聯系人。 但是,當我嘗試搜索聯系人時,出現空指針異常,應用程序關閉。 誰能看到這個問題?

這是日志貓:

在此處輸入圖片說明

謝謝

如果您看不懂,這是logcat的另一個版本:)

03-26 11:52:37.983: D/dalvikvm(12524): GC_CONCURRENT freed 78K, 7% free 12818K/13703K,     
paused 10ms+3ms, total 45ms
03-26 11:52:37.988: D/AbsListView(12524): [unregisterDoubleTapMotionListener]
03-26 11:52:37.993: I/MotionRecognitionManager(12524):   .unregisterListener : /     
listener count = 0->0, listener=android.widget.AbsListView$4@42464368
03-26 11:55:53.778: I/Process(12524): Sending signal. PID: 12524 SIG: 9
03-26 11:56:42.238: E/SensorManager(13254): thread start
03-26 11:56:42.238: D/SensorManager(13254): registerListener :: handle = 0  name=     
LSM330DLC 3-axis Accelerometer delay= 200000 Listener=    
android.view.OrientationEventListener$SensorEventListenerImpl@4243e698
03-26 11:56:42.308: D/SensorManager(13254): unregisterListener::  Listener=     
android.view.OrientationEventListener$SensorEventListenerImpl@4243e698
03-26 11:56:42.308: D/Sensors(13254): Remain listener = Sending .. normal delay 200ms
03-26 11:56:42.308: I/Sensors(13254): sendDelay --- 200000000
03-26 11:56:42.308: D/SensorManager(13254): JNI - sendDelay
03-26 11:56:42.308: I/SensorManager(13254): Set normal delay = true
03-26 11:56:42.333: D/SensorManager(13254): registerListener :: handle = 0  name=    
LSM330DLC 3-axis Accelerometer delay= 200000 Listener=   
android.view.OrientationEventListener$SensorEventListenerImpl@4243e698
03-26 11:56:43.808: D/SensorManager(13254): registerListener :: handle = 0  name=   
LSM330DLC 3-axis Accelerometer delay= 200000 Listener= 
android.view.OrientationEventListener$SensorEventListenerImpl@42474b30
03-26 11:56:43.823: D/dalvikvm(13254): GC_CONCURRENT freed 119K, 7% free 12450K/13319K, 
paused 2ms+2ms, total 21ms
03-26 11:56:43.823: D/dalvikvm(13254): WAIT_FOR_CONCURRENT_GC blocked 6ms
03-26 11:56:43.843: D/SensorManager(13254): unregisterListener::  Listener=   
android.view.OrientationEventListener$SensorEventListenerImpl@42474b30
03-26 11:56:43.843: I/SensorManager(13254): Set min delay = 200000
03-26 11:56:43.843: I/SensorManager(13254): Before sending... delay = 200000
03-26 11:56:43.843: D/Sensors(13254): Remain listener = 
android.view.OrientationEventListener$SensorEventListenerImpl@4243e698
03-26 11:56:43.843: I/Sensors(13254): sendDelay --- 200000000
03-26 11:56:43.843: D/SensorManager(13254): JNI - sendDelay
03-26 11:56:43.848: D/SensorManager(13254): unregisterListener::  Listener= 
android.view.OrientationEventListener$SensorEventListenerImpl@4243e698
03-26 11:56:43.848: D/Sensors(13254): Remain listener = Sending .. normal delay 200ms
03-26 11:56:43.848: I/Sensors(13254): sendDelay --- 200000000
03-26 11:56:43.848: D/SensorManager(13254): JNI - sendDelay
03-26 11:56:43.848: I/SensorManager(13254): Set normal delay = true
03-26 11:56:43.873: D/SensorManager(13254): registerListener :: handle = 0  name= 
LSM330DLC 3-axis Accelerometer delay= 200000 Listener= 
android.view.OrientationEventListener$SensorEventListenerImpl@42474b30
03-26 11:56:44.003: W/IInputConnectionWrapper(13254): getSelectedText on inactive 
InputConnection
03-26 11:56:44.003: W/IInputConnectionWrapper(13254): setComposingText on inactive 
InputConnection
03-26 11:56:44.003: W/IInputConnectionWrapper(13254): getExtractedText on inactive 
InputConnection
03-26 11:56:45.658: D/AbsListView(13254): Get MotionRecognitionManager
03-26 11:56:45.673: D/AndroidRuntime(13254): Shutting down VM
03-26 11:56:45.673: W/dalvikvm(13254): threadid=1: thread exiting with uncaught   
exception (group=0x417922a0)
03-26 11:56:45.678: E/AndroidRuntime(13254): FATAL EXCEPTION: main
03-26 11:56:45.678: E/AndroidRuntime(13254): java.lang.RuntimeException: Unable to 
start activity 
ComponentInfo{cs306.hw2.database/cs306.hw2.database.SearchResultsActivity}:    
java.lang.NullPointerException 03-26 11:56:45.678: E/AndroidRuntime(13254):     at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
android.app.ActivityThread.access$600(ActivityThread.java:140)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
android.os.Handler.dispatchMessage(Handler.java:99)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
android.os.Looper.loop(Looper.java:137)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
android.app.ActivityThread.main(ActivityThread.java:4898)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
java.lang.reflect.Method.invokeNative(Native Method)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
java.lang.reflect.Method.invoke(Method.java:511)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
dalvik.system.NativeStart.main(Native   Method)
03-26 11:56:45.678: E/AndroidRuntime(13254): Caused by: java.lang.NullPointerException
03-26 11:56:45.678: E/AndroidRuntime(13254):    at     
s306.hw2.database.SearchResultsActivity.getSearchResults(SearchResultsActivity.java:34)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
cs306.hw2.database.SearchResultsActivity.onCreate(SearchResultsActivity.java:27)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at  
android.app.Activity.performCreate(Activity.java:5206)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
03-26 11:56:45.678: E/AndroidRuntime(13254):    at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
03-26 11:56:45.678: E/AndroidRuntime(13254):    ... 11 more

這是裁員文件

    <ListView
        android:id="@+id/contactcListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

這行對我來說似乎是個問題:

 listview = (ListView)findViewById(R.id.contactcListView);

什么是“ contactcListView”? 我在任何地方都看不到這樣的事情。

NPE是最容易解決的問題之一。 堆棧跟蹤告訴您發生它的文件和行號。 您所要做的就是找到哪個引用為空以及為什么。

沒有

view = (TextView) findViewById(R.id.textView1);

在您定義的布局xml中。 view必須為空。

您在這里得到NPE,我認為:

Cursor c = db.getContactbyName(view.getText().toString());

請嘗試一下:

<ListView
    android:id="@+id/contactcListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
<TextView android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
 android:id="@+id/textView1"/>
</ListView>
</LinearLayout>

打開預期的ddms並運行應用程序

復制日志

暫無
暫無

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

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