2013-07-24 2 views
0

У меня возникла проблема, когда этот поток работает, поэтому мое приложение отключается. Я действительно не понимаю, где проблема.java.NullPointerException при запуске этого кода

public void onClick(DialogInterface dialog, int which) { 
    //Searching with post request   
    BugSenseHandler.sendEvent("Search started"); 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
     try { 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 

     nameValuePairs.add(new BasicNameValuePair("find", etMedName.getText().toString())); 

     String prec = ""; 
     if (cbPrecise.isChecked()) prec = "on"; 
     else prec = "off"; 

     nameValuePairs.add(new BasicNameValuePair("exact_match", prec)); 

     HttpClient client = new DefaultHttpClient(); 
     HttpPost post = new HttpPost("http://mashkovsky.ru/tiki-listpages.php"); 
     post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse resp = client.execute(post); 

     String html = ""; 
     html = EntityUtils.toString(resp.getEntity()); 

     Document doc = Jsoup.parse(html, "http://mashkovsky.ru/tiki-listpages.php"); 
     Element content = doc.getElementById("wrapper"); 
     wView.loadData(content.outerHtml(), "text/html", "utf-8"); 
     MainActivity.this.removeDialog(SEARCH_DIALOG); 
    } 
    catch (ClientProtocolException e) {e.printStackTrace();} 
    catch (IOException e) {e.printStackTrace();} 
} 
}).start();    
} 

У меня нет StackTrace в окне LogCat в затмении, но BugSense показывает этот короткий StackTrace

java.lang.NullPointerException 
at ru.pathdevel.mashkovsyreference.MainActivity$1$1.run(MainActivity.java:106) 
at java.lang.Thread.run(Thread.java:856) 

UPD: Проблема решена. Все было в инициализации. Я пытался использовать виджеты main.xml, а не searchdialog.xml

+0

Где произносится 'cbPrecise'? – CodingIntrigue

+0

Объявлено глобальным и инициализировано в 'onCreateDialog' –

+2

, где находится строка 106? – ben75

ответ

1

Просто поместите контрольную точку в методе запуска вашего Runnable, отлаживая приложение, проверьте значения ваших переменных. Кажется, что это пустое.

я особенно сосредоточиться на:

  • etMedName
  • cbPrecise

Кроме того, вы проверили, содержит ли ваш HttpResponse содержание?

Кстати, removeDialog устарел с API-уровня 13. Вместо этого я предлагаю использовать DialogFragment из библиотеки поддержки.

0

etMedName есть null или etMedName.getText() есть null. Итак, вы можете сделать что-то вроде этого:

@Override 
public void run() { 
    if(etMedName==null || etMedName.getText()==null) return; 
    ... 
} 
Смежные вопросы