0

このスレッドの実行中に問題が発生したため、アプリがクラッシュします。問題がどこにあるのか、よくわかりません。

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();             
}

Eclipse の LogCat ウィンドウにスタックトレースはありませんが、BugSenseはこの短いスタックトレースを表示します

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

UPD: 問題は解決しました。すべてが初期化されていました。searchdialog.xml ではなく、main.xml レイアウト ウィジェットを使用しようとしていました。

4

2 に答える 2

1

Runnable の run メソッドにブレークポイントを設定し、アプリをデバッグして、変数の値を確認するだけです。1つはヌルのようです。

私は特に次のことに集中したいと思います。

  • etMedName
  • cbPrecise

さらに、HttpResponse にコンテンツが含まれているかどうかを確認しましたか?

ところで、removeDialog は API レベル 13 から廃止されました。代わりに、サポート ライブラリの DialogFragment を使用することをお勧めします。

于 2013-07-24T08:47:37.993 に答える
0

etMedNamenull またはetMedName.getText()null です。したがって、次のようなことができます。

@Override
public void run() {
    if(etMedName==null || etMedName.getText()==null) return;
    ...
}
于 2013-07-24T08:48:06.560 に答える