2013-08-20 3 views
0

Я использую этот код для получения содержимого какого-либо веб-сайта. текст остается пустым. Что я делаю неправильно? Я добавил банку в библиотеку, а также добавил разрешение на доступ в интернет.Android JSoup с AsyncTask - не отображается содержимое

public class MainActivity extends Activity { 
MyTask mt; 
    TextView tvInfo; 
    String URL="http://www.example.com/"; 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    tvInfo = (TextView) findViewById(R.id.textView1); 
    } 

    public void onclick(View v) { 
    mt = new MyTask(); 
    mt.execute(URL); 
    } 

    class MyTask extends AsyncTask<String, Void, String> { 
     Document doc; 
     String title=null; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     tvInfo.setText("Please wait"); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
     TimeUnit.SECONDS.sleep(2); 
     // doc = Jsoup.connect(params[0]).get(); 
     // String title = doc.title(); 

     doc = Jsoup.connect("http://www.example.com/").get(); 
     Element content = doc.select("a").first(); 
     title = content.text(); 

     Log.d("AsyncTask doInBackground","URL: " + params[0]); 
     } catch (InterruptedException e) { 
     e.printStackTrace(); 
     } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
     return title; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     tvInfo.setText(title); 
    } 
    } 
} 

Я также не excaly, когда каждый метод здесь называется понять Большое спасибо!

EDIT - код после того, что было предложено в ответ. До сих пор не работает:

public class MainActivity extends Activity implements OnClickListener{ 
    MyTask mt; 
    TextView tvInfo; 
    String URL="http://www.example.com/"; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     tvInfo = (TextView) findViewById(R.id.textView1); 
     tvInfo.setOnClickListener(this); 
    } 



    private class MyTask extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... params) { 
      String title = "hh"; 
      try{ 
       Document doc = Jsoup.connect("http://google.com").userAgent("Mozilla").get(); 
       title = doc.title(); 
       System.out.println("title : " + title); 

       // get all links 
       Elements links = doc.select("a[href]"); 
       for (Element link : links) { 

        // get the value from href attribute 
        System.out.println("\nlink : " + link.attr("href")); 
        System.out.println("text : " + link.text()); 
       } 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return title; 

     }  

     @Override 
     protected void onPostExecute(String result) { 
      tvInfo.setText(result); 
     } 

     @Override 
     protected void onPreExecute() { 
      tvInfo.setText("Please wait"); 
     } 

    } 


    @Override 
    public void onClick(View v) { 
     mt = new MyTask(); 
     mt.execute(URL); 
    } 

} 

ответ

0

AsyncTask выполняет все в doInBackground() внутри другого потока, который не имеет доступа к графическому пользовательскому интерфейсу, где ваши взгляды.

preExecute() и postExecute() предложение вы получите доступ к GUI до и после того, как тяжелый подъем происходит в этой новой теме, вы можете даже передавать результат длительной эксплуатации в postExecute() для затем показать любые результаты переработки.

private class MyTask extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... params) { 
     try{ 
      Document doc = Jsoup.connect("http://google.com").userAgent("Mozilla").get(); 
      String title = doc.title(); 
      System.out.println("title : " + title); 

      // get all links 
      Elements links = doc.select("a[href]"); 
      for (Element link : links) { 

      // get the value from href attribute 
      System.out.println("\nlink : " + link.attr("href")); 
      System.out.println("text : " + link.text()); 
     } catch (IOException e) { 
    e.printStackTrace(); 
} 

     }  

     @Override 
     protected void onPostExecute(String result) { 

     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      tvInfo.setText("Please wait"); 
     } 

} 
+0

Спасибо, что вы exaplantion. – user1932595

+0

Где я могу добавить код? вместо моей основной? – user1932595

+0

@ user1932595 Нет вместо вас класс 'myTask'. Оставьте MainActivity так, как есть, и если вы найдете мой ответ полезным, проголосуйте за него и примите его в качестве ответа. Спасибо –

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