【问题标题】:Android - Jsoup.connect().get()Android - Jsoup.connect().get()
【发布时间】:2014-04-12 14:42:59
【问题描述】:

我是使用 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");
    }
}
}

【问题讨论】:

    标签: android jsoup


    【解决方案1】:

    这是因为您在主线程中运行此代码。您必须放入一个 AsyncTask 或另一个新线程...切勿在主线程上执行繁重的操作(例如 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);}}
    

    【讨论】:

    • 请将结果分享给其他用户。
    【解决方案2】:

    轻量级

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

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多