Olá,
Estou tentando fazer um app que acessa uma página html e extrai informações dela.
A biblioteca que escolhi foi a Jsoup.
Só que o código “trava” no Android, o método simplesmente não retorna.
Eu testei praticamente o mesmo código em um app desktop e funciona.
O método que não retorna é o “getConteudoDaPagina()” da classe Crawler.
Sei disso porque coloquei dois prints: um antes, outro depois. Printa apenas o primeiro.
Adicionei a permissão INTERNET no Manifest.
Códigos:
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AsyncTaskLoader<String> teste = new AsyncTaskLoader<String>(this) {
@Nullable
@Override
public String loadInBackground() {
return new Crawler().getResultado();
}
};
teste.forceLoad();
teste.registerListener(1, new Loader.OnLoadCompleteListener<String>() {
@Override
public void onLoadComplete(@NonNull Loader<String> loader, @Nullable String data) {
TextView tv = MainActivity.this.findViewById(R.id.resultado);
tv.setText(data.toString());
}
});
}
}
Crawler.java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Crawler {
private final static String ENDERECO = "http://google.com";
private Document getConteudoDaPagina() throws IOException {
return Jsoup.connect(ENDERECO).get();
}
public String getResultado() {
try {
Document dom = getConteudoDaPagina();
return dom.title();
} catch (IOException ignore) {
}
return null;
}