1

私はjsoupの使用に慣れていないので、私の研究でウェブで見たように、public static void main内でjsoupコードを使用する必要があるかどうか、または他のメソッド内で使用できるかどうかを尋ねたいだけです。また、Jsoup.connect().get() に問題があります。アプリケーションを実行すると、アプリケーションが常に停止します。私はすでに android.permission.Internet を AndroidManifest.xml に追加しました。クックブックを読み、ドキュメントの解析から始めることにしましたが、それでも同じ結果が生成されます - 残念ながら、アプリケーションは停止しました。私の minsdkversion は 8 で、targetsdkversion は 15 です。ご容赦ください。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Jsoup_2 extends Activity{
static String website_url = "http://www.google.com";

/**
 * @param args
 */
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_jsoupactivity);

    try{
         Document doc = Jsoup.connect(website_url).get();
        ((TextView)findViewById(R.id.label)).setText("Loading website");
    }catch (Exception e){
        ((TextView)findViewById(R.id.label)).setText("error");
    }
}
}
4

2 に答える 2

2

これは、メイン スレッドでこのコードを実行しているためです。AsyncTask または別の新しい Thread を配置する必要があります...メインスレッドで重い操作を実行しないでください (例: onCreate() メソッド)。

public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_jsoupactivity);

new AsyncTask(String,Integer,Document) {
  public Document doInBackground(String... params) {
   Document doc = null;
   try{
     doc = Jsoup.connect(params[0]).get();

    }catch (Exception e){
     doc = null;
    }

 return doc;
  }

 public void onPostExecute(Document result) {
   if (result != null) {
    ((TextView)findViewById(R.id.label)).setText("Loading website");
   } else {
    ((TextView)findViewById(R.id.label)).setText("Error");
   }
  }

}.execute(website_url);}}
于 2013-06-29T14:51:38.803 に答える
0

軽量

    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_jsoupactivity);
       final TextView tv = (TextView) findViewById(R.id.label);

       new Thread(new Runnable() {
           @Override
           public void run() {
               String str;
               try {
                   Document doc = Jsoup.connect(website_url).get();
                   str = "";
               } catch (Exception e) {
                   str = ",";
               }
               final String finalStr = str;
               tv.post(new Runnable() {
                   @Override
                   public void run() {
                      tv.setText(finalStr);
                  }
              });
          }
      }).start();

}

于 2014-04-12T06:42:59.417 に答える