java android android-asynctask jsoup httpresponse

java - No se pueden analizar datos HTML con Android/JSOUP



android-asynctask httpresponse (2)

Intente pasar la vista de texto como un argumento contructor a su clase DownloadWebPageTask.

DownloadWebPageTask task = new DownloadWebPageTask(textView);

En su clase DownloadWebPageTask, defina una variable TextView para contener este objeto.

Actualice lo mismo en el método onPostExecute ().

Tengo un problema en el que intento utilizar JSOUP para obtener datos de una página web (en este caso, google.com) y cuando se restauran los datos del título y se muestran en el logcat; sin embargo, mi vista de texto nunca parece actualizarse con los datos recién obtenidos.

FUENTE:

package com.example.test; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { private TextView textView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.TextView01); } private class DownloadWebPageTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { String response = ""; for (String url : urls) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); try { Document doc = Jsoup.connect("http://google.com") .userAgent("Mozilla") .get(); // get page title 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(); } } return response; } @Override protected void onPostExecute(String title) { textView.setText(title); } } public void onClick(View view) { DownloadWebPageTask task = new DownloadWebPageTask(); task.execute(new String[] { "http://www.google.com" }); } }

EDITAR: (en respuesta a la sugerencia del superusuario - controlador de implementación)

public class MainActivity extends Activity { private TextView textView; private Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.TextView01); handler = new Handler(); } private class DownloadWebPageTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { String response = ""; for (String url : urls) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); try { Document doc = Jsoup.connect("http://google.com") .userAgent("Mozilla") .get(); // get page title 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(); } handler.post(new Runnable() { @Override public void run() {}}); } return response; } @Override protected void onPostExecute(String title) { textView.setText(title); View.invalidate(); } } public void onClick(View view) { DownloadWebPageTask task = new DownloadWebPageTask(); task.execute(new String[] { "http://www.google.com" }); } }

RESULTADOS (de la edición que se muestra arriba):

Cannot make a static reference to the non-static method invalidate() from the type View MainActivity.java Cannot refer to a non-final variable title inside an inner class defined in a different method MainActivity.java


Lo siento, estaba a punto de responder esta pregunta ayer, pero me quedé dormido en mi teclado: P

Pero su cadena de resultados: protected void onPostExecute(String result) no pasa nada. El problema se resuelve fácilmente.

  1. Sobre tu onCreate:

String title;

  1. En tu doInBackGround:

title = doc.title();

  1. En su onPostExecute:

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