muy buenas a todos, soy nuevo en el foro y en esto de android tambien, y tratando de realizar un proyecto me e encontrado con un problema con el que espero me puedan ayudar.
resulta que debo crear una aplicacion que me clasifique paginas web por medio de las etiquetas de su codigo html, de momento en codigo java he logrado crear una clase que con la url; me guarda en un arraylist las etiquetas en la pagina y la cantidad de veces que cada una se repite. cuando trato de ejecutar esto en el emulador de android la aplicacion se cierra, lo que tengo de momento es que en la actividad inicial se ingresa la url, y con un boton cargo la segunda pasandole esta url, y luego me muestre el numero de elemntos en el arraylist, pero no me muestra nada, luego se detiene la aplicacion y me muestra el mensaje "la aplicacion se ha detenido inesperadamente".
espero haberme explicado bn.
les mmuestro el codigo de la clase.
Código:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Clasificador {
public String url;
public ArrayList<Etiqueta> etiquetas;
public int longitud;
public String msj;
public Clasificador(String url){
this.url = url;
}
public ArrayList<Etiqueta> leerHtml(){
URL urlObj;
String todohtml ="";
try{
urlObj = new URL(this.url);
InputStreamReader isreader = new InputStreamReader(urlObj.openStream());
BufferedReader bfreader = new BufferedReader(isreader);
String codigo;
while((codigo = bfreader.readLine()) != null){
todohtml += codigo +"\n";
this.longitud++;
}
bfreader.close();
contarEtiqutas(todohtml);
Collections.sort(this.etiquetas, new Comparator<Etiqueta>(){
public int compare(Etiqueta e1, Etiqueta e2){
return e1.nombre.compareTo(e2.nombre);
}
});
this.msj = "Resultado Exitoso";
}catch(MalformedURLException e){
this.msj = "URL ilegible";
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
this.msj = "Ocurrio un Error inesperado.\n" + e.getMessage();
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
return etiquetas;
}
private void contarEtiqutas(String cadena){
this.etiquetas = new ArrayList<Etiqueta>();
//String cadena = "<div id='tag_cloud-2' class=String[] args_cloud widget-widget_tag_cloud <h1 clearfix'>";
boolean guardar = false;
boolean esta = false;
String nombre = "";
for (int i = 0; i < cadena.length(); i++) {
char letra = cadena.charAt(i);
if (letra == '<') {
i++;
letra = cadena.charAt(i);
while (Character.isLetter(letra)) {
nombre += letra;
guardar = true;
i++;
letra = cadena.charAt(i);
}
if (guardar) {
//guardar la etiqueta en la lista
for (Etiqueta etiqueta : this.etiquetas) {
if (("<" + nombre + ">").equals(etiqueta.nombre)) {
etiqueta.count++;
esta = true;
}
}
if (!esta) {
Etiqueta etiqueta = new Etiqueta();
etiqueta.nombre = "<" + nombre + ">";
etiqueta.count = 1;
this.etiquetas.add(etiqueta);
}//fin guardar etiqueta
nombre = "";
guardar = false;
esta = false;
}
}
}
}
}
y esto es lo que hago en la segunda actividad
Código:
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.GridView;
import android.widget.TextView;
import com.example.clasificarweb.classextras.Clasificador;
import com.example.clasificarweb.classextras.Etiqueta;
public class TablaEtiquetas extends Activity {
private String url;
GridView gridView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tabla_etiquetas);
Bundle bundle = getIntent().getExtras();
TextView urltxt = (TextView) findViewById(R.id.textView1);
url = bundle.getString("url");
//urltxt.setText(url);
//generarTabla();
urltxt.setText(generarTabla().size());
}
public void regresar(View view) {
finish();
}
public ArrayList<Etiqueta> generarTabla(){
Clasificador clasificador = new Clasificador(url);
ArrayList<Etiqueta> datos = clasificador.leerHtml();
return datos;
}
}
no estoy seguro de que sea la manera correcta de hacerlo en una aplicacion android, ni de si sea la mejor manera de hacerlo, espero me puedan ayudar y dar sujerencias
gracias de antemano
Editado por un usuario jueves, 29 de mayo de 2014 23:21:28(UTC)
| Razón: No especificada