Autore Topic: android problema con net  (Letto 613 volte)

Offline shoom

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy ACE
  • Sistema operativo:
    Windows7
android problema con net
« il: 04 Dicembre 2011, 17:45:45 CET »
0
Ciao a tutti,
sono nuovo nel forum e sto cercando di sviluppare la mia prima applicazione  per android:-)
Ho cercato delle possibili soluzioni al mio problema sul forum ma non ho trovato nulla.
Quello che vorrei fare è visualizzare il codice html di una ricerca su google. Premetto che il metodo che utilizzo funziona se non applicato al contesto android.
Ciò che non capisco è come mai mi venga notificato l'errore networkonmainthreadexception nonostante io utilizzi un Thread che comunica con il mainthread mediante un handler(visto che di solito questo errore indica l'utilizzo dei metodi net nel mainThread).

vi posto il codice:

Codice (Java): [Seleziona]
package your.luca.testAndroid;
 


import your.luca.testAndroid.R;
import android.app.Activity;
import android.os.Bundle;
import android.os.Message;
import android.text.Editable;
import android.view.*;
import android.widget.*;
import android.os.Handler;

public class TestAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btn = (Button)findViewById(R.id.cerca);
        btn.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){cerca();}});

         
           
           
             
    }
   

   
    private void cerca(){

        EditText nas = (EditText) findViewById(R.id.testo);
                Editable ricerca = nas.getText();
                String appoggio = ricerca.toString();
       

            Handler handler = new MyHandler();
                googleSearch nuovo = new googleSearch(appoggio,handler);
       
        }
   
    private class MyHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
          TextView txt = (TextView) findViewById(R.id.txt);
          Bundle bundle = msg.getData();
          if(bundle.containsKey("refresh")) {
            String value = bundle.getString("refresh");
            txt.setText(value);
          }
        }
      }

 
       
}

e il  thread che gestisce la ricerca su google

Codice (Java): [Seleziona]
package your.luca.testAndroid;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

public class googleSearch extends Thread{
       

        private Handler handler = null;

        public googleSearch(String ricerca,Handler handler){
                super("Ricerca");
                this.handler = handler;
                this.run(ricerca);
        }

        public void run(String ricerca){
                String ris = ricercaGoogle(ricerca);   
               
                Message msg = handler.obtainMessage();
            Bundle b = new Bundle();
            b.putString("refresh",ris);
            msg.setData(b);
            handler.sendMessage(msg);
 
        }
       
        public static String ricercaGoogle(String query){
                String app = query;
                String risultato = "";
                for(int z = 0;z < query.length();z++){
                        if(app.charAt(z) == ' '){
                                app = app.substring(0,z)+'+'+app.substring(z+1);
                        }
                }
                try {
                        String lin = "[url=http://www.google.it/search?q="+app;]Google[/url]

                        URL url = new URL(lin);
                        URLConnection urlConn = url.openConnection();
                        urlConn.setConnectTimeout(5000);
                        urlConn.setRequestProperty("User-agent","Mozilla/8.0");
                       
                       
                        //stampo risultato
                        String str;
                       
                         
                       
                        InputStreamReader in = new InputStreamReader(urlConn.getInputStream(),"utf-8");
                        BufferedReader ris  = new BufferedReader(in);
                        while (null != ((str = ris.readLine()))) {
                                //System.out.println(str);
                                risultato = risultato +'\n'+str;
                        }
                        ris.close();
           
            }
                       
                } catch (IOException e) {System.out.println("Errore nel carcamento della pagina");}
                return risultato;
        }
       
}

Quale potrebbe essere il problema??
Grazie a tutti della disponibilità  :-) :-)
« Ultima modifica: 04 Dicembre 2011, 17:51:03 CET da shoom »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:android problema con net
« Risposta #1 il: 04 Dicembre 2011, 20:53:09 CET »
0
Il problema è nel fatto che in quel modo tu non fai partire un nuovo thread.
Per usare la classe Thread devi sovrascrivere il metodo run() (senza aggiungerci parametri però), e poi farlo partire chiamando il metodo start()

Codice (Java): [Seleziona]
package your.luca.testAndroid;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

public class GoogleSearch extends Thread{
       

        private Handler handler = null;
        private String mRicerca;
        public GoogleSearch(String ricerca,Handler handler){
                super("Ricerca");
                this.handler = handler;
        }

        public void run(){
                String ris = ricercaGoogle(mRicerca);  
               
                Message msg = handler.obtainMessage();
            Bundle b = new Bundle();
            b.putString("refresh",ris);
            msg.setData(b);
            handler.sendMessage(msg);
 
        }
       
        public static String ricercaGoogle(String query){
                String app = query;
                String risultato = "";
                for(int z = 0;z < query.length();z++){
                        if(app.charAt(z) == ' '){
                                app = app.substring(0,z)+'+'+app.substring(z+1);
                        }
                }
                try {
                        String lin = "[url=http://www.google.it/search?q="+app;]Google[/url]

                        URL url = new URL(lin);
                        URLConnection urlConn = url.openConnection();
                        urlConn.setConnectTimeout(5000);
                        urlConn.setRequestProperty("User-agent","Mozilla/8.0");
                       
                       
                        //stampo risultato
                        String str;
                       
                         
                       
                        InputStreamReader in = new InputStreamReader(urlConn.getInputStream(),"utf-8");
                        BufferedReader ris  = new BufferedReader(in);
                        while (null != ((str = ris.readLine()))) {
                                //System.out.println(str);
                                risultato = risultato +'\n'+str;
                        }
                        ris.close();
           
            }
                       
                } catch (IOException e) {System.out.println("Errore nel carcamento della pagina");}
                return risultato;
        }
       
}


Offline shoom

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy ACE
  • Sistema operativo:
    Windows7
Re:android problema con net
« Risposta #2 il: 05 Dicembre 2011, 11:19:01 CET »
0
Grazie ricky, effettivamente il run con i parametri causava quei problemi :) grazie ora funziona!!