Autore Topic: Aprire una nuova activity  (Letto 848 volte)

Offline leo87

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    windows 8
Aprire una nuova activity
« il: 21 Agosto 2013, 18:09:37 CEST »
0
Ciao a tutti...
Mettiamo che ho una classe che implementa Runnable e voglio avviare da questa classe un'activity, ho provato con:
Intent intent = new Intent(getApplicationContext(),Registration.class);
startActivity(intent); 

ma il problema è quel getApplicationContext....come risolvo il problema? grazie

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aprire una nuova activity
« Risposta #1 il: 21 Agosto 2013, 19:33:44 CEST »
0
Non so come è il tuo codice, ma potresti provare a passare il Context al Runnable in fase di creazione del Runnable stesso.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline leo87

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    windows 8
Re:Aprire una nuova activity
« Risposta #2 il: 21 Agosto 2013, 19:42:01 CEST »
0
E' una classe Connect (questo è il nome) che estende runnable che mi serve per gestire la connessone ad un server, questa classe Connect in base alla risposta del server deve far partire l'activity Registration...Quindi l'activity che invoca Connect gli deve passare nel costruttore il Context (ovviamente mi creo un'istanza in Connect per salvarmi il Context); quindi dovrei fare una cosa del genere nella prima activity:
Connect c=new Connect (getApplicationContext())

e poi in Connect:
Codice (Java): [Seleziona]
private Context mContext;
pubblic Connect(Context c){
   mContext=c;
}
quindi far partire l'activity:
Codice (Java): [Seleziona]
Intent intent = new Intent(mContext,Registration.class);
startActivity(intent);  


Così dovrebbe funzionare?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aprire una nuova activity
« Risposta #3 il: 21 Agosto 2013, 19:52:28 CEST »
0
Penso di si.

L'unico dubbio che ho è se è "gradito" lanciare una activity da un thread secondario. In caso fosse "sgradito", occorre far spedire un messaggio dal runnable all'handler del thread principale e in questo chiamare startactivity.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline leo87

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    windows 8
Re:Aprire una nuova activity
« Risposta #4 il: 22 Agosto 2013, 00:00:00 CEST »
0
Come faccio a spedire un messaggio all'altro thread?

potrei creare un metodo(che fa partire l'activity Registration) nel thread principale e richiamarlo dalla classe Connect dopo che ricevo la risposta dal server?
« Ultima modifica: 22 Agosto 2013, 00:10:22 CEST da leo87 »

Offline matttt

Re:Aprire una nuova activity
« Risposta #5 il: 22 Agosto 2013, 08:36:11 CEST »
0
Se vuoi scambiare informazioni tra diversi threads devi usare funzioni apposite di IPC (inter-process comunications)

Prova questo link della documentazione Android:
http://developer.android.com/guide/components/bound-services.html#Messenger

Non fare caso ai bound services, concentrati su quel paragrafo specifico "Using a Messenger" in cui ti spiega come usare gli Handler.
Le mie apps su Google Play Store:

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aprire una nuova activity
« Risposta #6 il: 22 Agosto 2013, 08:57:57 CEST »
0
Come faccio a spedire un messaggio all'altro thread?

E' un tutorial minimale e un po' vecchio, ma spiega anche come mandare messaggi tra thread:
[medio] Introduzione ai Thread - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline leo87

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    windows 8
Re:Aprire una nuova activity
« Risposta #7 il: 22 Agosto 2013, 12:21:01 CEST »
0
Penso di essere arrivato ad una soluzione...ho scelto la strada dell'handler che mi è sembrata la più facile, posto la soluzione per avere qualche commento:

attivity principale molto banale con un button che effettua la connessione al server
Codice (XML): [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity" >

    <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/hello_world" />

    <Button
       android:id="@+id/button1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignLeft="@+id/textView1"
       android:layout_alignParentBottom="true"
       android:layout_marginBottom="29dp"
       android:text="connect" />

   
    <EditText
       android:id="@+id/editText1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_below="@+id/textView1"
       android:layout_marginTop="108dp"
       android:layout_toRightOf="@+id/button1"
       android:ems="10" >

        <requestFocus />
    </EditText>

</RelativeLayout>

java ui....dentro l'oggetto final Handler handler posso far partire la mia activity, ma ancora non ho provato
Codice (Java): [Seleziona]
public class MainActivity extends Activity {
        private String app;
        private EditText editText;

         final Handler handler = new Handler() {
                                public void handleMessage(Message msg) {
                                                app = (String)msg.obj;
                                                editText.append(app);

                                    }
         };
                   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText)findViewById(R.id.editText1);
   
   
        View.OnClickListener gestore1 = new View.OnClickListener() {
            public void onClick(View view) {
                    switch(view.getId()){
                    case R.id.button1:
                        Connect c=new Connect(handler);
                        Thread cThread = new Thread(c);
                                cThread.start();
                    break;
                    }      
            }
        };
    //faccio partire il button login
    Button a1=(Button)findViewById(R.id.button1);
    a1.setOnClickListener(gestore1);

   }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
   
}


classe che gestisce le connessioni
Codice (Java): [Seleziona]
public class Connect implements Runnable{

       
        private Handler mHandler;
        private Message msg;
        private String str;
       
        public Connect(Handler h){
                mHandler=h;
        }
        @Override
        public void run() {
                // TODO Auto-generated method stub
                try {

                        InetAddress serverAddr = InetAddress.getByName("192.168.1.101");//TCPServer.SERVERIP

                        Socket socket = new Socket(serverAddr, 4444);
                        String message = "prova1";
                        try {

                                PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
                                out.println(message);
                       
                               
                                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                String txt = in.readLine();
                                str =  txt + "'\n";
                                msg = mHandler.obtainMessage(0, str);
                                mHandler.sendMessage(msg);



                        } catch(Exception e) {
                                str = "Error: " + e.toString();
                                msg = mHandler.obtainMessage(0, str);
                                mHandler.sendMessage(msg);
                        } finally {
                                socket.close();
                        }
                } catch (Exception e) {
                        str = "Error: " + e.toString();
                        msg = mHandler.obtainMessage(0, str);
                        mHandler.sendMessage(msg);
                }
        }

}


ps Funziona tutto...grazie  ;-)
« Ultima modifica: 22 Agosto 2013, 17:48:19 CEST da leo87 »