2013-03-26 7 views
0

Я делаю приложение списка контактов. У меня есть кнопка называется кнопка поиска и при щелчке, я читал имя, написанное в текстовом поле и поиске в базе данных Вот мой код:Получение исключения nullpointer в моем коде

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() метод работает отлично и печатает все контакты. Но когда я пытаюсь найти контакт, я получаю исключение nullpointer и приложение отключается. Может ли кто-нибудь увидеть проблему?

А вот журнал кот:

enter image description here

Благодаря

Вот еще одна версия 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, [email protected] 
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=  
[email protected]43e698 
03-26 11:56:42.308: D/SensorManager(13254): unregisterListener:: Listener=  
[email protected]43e698 
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= 
[email protected]43e698 
03-26 11:56:43.808: D/SensorManager(13254): registerListener :: handle = 0 name= 
LSM330DLC 3-axis Accelerometer delay= 200000 Listener= 
[email protected]474b30 
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= 
[email protected]474b30 
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 = 
[email protected]43e698 
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= 
[email protected]43e698 
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= 
[email protected]474b30 
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 

А вот layour файл

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

</LinearLayout> 
+1

Можете ли вы включить трассировку стека? – Cornholio

+0

Извините, я новичок и что такое трассировка стека? – 2013-03-26 09:45:39

+0

, пожалуйста, покажите нам файл журнала ... –

ответ

0

Там нет

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

i = 0 содержит идентификационную информацию, и я не хочу ее печатать. Я просто печатаю имя, адрес телефона и адрес электронной почты – 2013-03-26 09:55:02

+0

, вы правы, в этом XML-файле нет textWiew1, но вот что я делаю: у меня есть другой файл макета xml, где у меня есть текстовое поле, в которое пользователь вводит имя для поиска , Затем этот файл макета, который я дал, загружается, когда пользователь нажимает кнопку поиска. Итак, поскольку текстовое поле указано в другом XML-файле, я объявил texView1 в этом XML-файле. Я делаю неправильно? – 2013-03-26 10:24:58

+0

Я понял, что это была не ошибка, но помогла мне найти ее. Так что спасибо! – 2013-03-26 12:15:16

0

Эта линия выглядит как проблема для меня:

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

Что такое "contactcListView"? Я не вижу такой вещи нигде.

NPE - одна из самых простых проблем для решения. Трассировка стека сообщает вам номер файла и строки, в котором он произошел. Все, что вам нужно сделать, это найти, какая ссылка является нулевой и почему.

+0

он находится в файле макета, я думаю, что это не проблема, потому что метод getAllContacts() отлично работает – 2013-03-26 09:55:47

+0

Вы считаете неправильным. Перестаньте думать, что каждая вещь «прекрасна» - вы быстрее решаете свою проблему. – duffymo

+0

ОК, спасибо. Я добавил также файл xml, можете ли вы снова посмотреть? – 2013-03-26 10:05:04

0

Открыть DDMS перспективных и запустить приложение

скопировать журналы

Смежные вопросы