2013-08-08 2 views
1

J'ai une activité, et un boutonClick où j'appelle un fil qui POSTERa un certain JSON à un fichier PHP. Je souhaite que l'activité soit Fermée après la fin du fil. Comment puis je faire ça?Android fermer l'activité après la fin du fil

Ceci est mon événement click:

Button bsave = (Button) findViewById(R.id.button3); 
    View.OnClickListener eventHandlerx = new View.OnClickListener() { 
     @Override 
      public void onClick(View arg0) { 
         sendJson(urlx, jsonarray); 
        } 
    ... 

Et voici ma discussion:

private void sendJson(final String urlx, final JSONArray jsonarray) { 
    Thread t = new Thread() { 
     public void run() { 
     Looper.prepare(); 
     ...} 
    ...} 
} 

Où puis-je appeler finish() pour fermer mon activité? Merci

Répondre

1

Vous pouvez appeler finish() de n'importe où dans le fil de l'interface utilisateur. Vous pouvez exécuter du code à partir du thread de l'interface utilisateur en utilisant un onPostExecute (remplacez votre Thread par lui) ou en démarrant un Runnable en utilisant runOnUiThread.

+0

Ainsi, en utilisant cette discussion il n'y a aucun moyen de terminer l'activité en cours? – user1137313

+0

Je viens de mettre à jour la réponse pour être un peu plus clair. Vous pouvez uniquement appeler finish à partir d'un thread d'interface utilisateur, car cela perturbe l'interface utilisateur. Cela peut fonctionner, mais il n'est indiqué nulle part qu'il est sûr de terminer une activité à partir d'un autre thread. – dst

+2

Remarque: 'AsyncTask' est la méthode recommandée pour faire ce que vous faites, car elle enveloppe tous les éléments de sécurité des threads. – dst

0

Voici un exemple en utilisant gestionnaire puisque vous voulez juste fermer l'activité:

new Handler().post(new Runnable() { 
     @Override 
     public void run() { 

      //do your stuff here 

      MyActivity.this.finish(); 
     } 
    }); 

Mais comme @dst mentionné, vous devez utiliser AsyncTask chaque fois que possible.

1

espère que cela vous aidera

class SendJson extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 
    //here you can call functionality 

    }   

    @Override 
    protected void onPostExecute(String result) {    
    //here you can call finish 
    } 

    @Override 
    protected void onPreExecute() { 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
    } 
} 
Questions connexes