2016-11-08 7 views
-6

スレッドが終了したときを知る方法を理解しようとしています。スレッドが終了したときを知る

public void movetoKnox(View view) throws Exception 
    { 
     countp = 0; 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 

       count = movefileList.size();//4 
       count2 = multiFile.size();//2 
       for (int i =0; i<count; i++) 
       { 
        for(int j=0; j<count2;j++) 
        { 
         if(movefileList.get(i).equals(multiFile.get(j))) 
         { 

          File temp = new File(multiFile.get(j)); 
          try{ 
           //copyFile(temp,chamberLocation); 
           copyFileOrDirectory(multiFile.get(j),chamberLocations); 

          }catch (Exception e) 
          { 
           Log.e(TAG,"Exception Alex: "+e); 
           // Toast.makeText(moveKnox.this, "Exception: "+e,Toast.LENGTH_SHORT).show(); 
          } 

         } 
        } 

       } 



      } 

     }; 

Thread t = new Thread(r); 
     t.start(); 

現在、このスレッドは一括でデータ転送を行います。それはmbからgbのカップルからすることができます。私はデータ転送が完了したことを伝え、背景にトーストを表示したいと思っています。

私は新しいスレッドを作成し、その中でt.join()を呼び出すと思っていましたが、ちょうどクラッシュしました。

+2

lmao capslockingがポイントですが、あなたのコードでスイートに従わなかったことにはちょっと残念です。 –

+1

caps lockで質問を書かないでください。それは読むのが難しい。 – Lexi

+0

読むのも難しいことではないが、それはOPが困っているという考えを放つ。私が8歳の時に帽子のロックを使いましたが、私は自分自身で努力するよりも、誰もが私のために問題を解決することを期待していました。 SOFはあなたが「欲しい」という場所に来る場所ではなく、自分でやっている仕事についての議論の場です。 – Jacksonkr

答えて

0

あなたはこの単純なことも必要なもの:

final MyClass self = this; 

Runnable r = new Runnable() { 
    @Override 
    public void run() { 
     // ** some code that takes forever ** 
     self.doADance(); // this is your toast animation or whatever you want 
    } 
}; 

主なものは、ここで起こっ:

  • Runnable
  • に後でので、我々はそれを使用することができます finalを経由して、現在のオブジェクトへの参照を保持しています
  • は非同期の "関数"(新しいスレッド)内で同期しています。つまり、時間がかかる関数が完了するまで、doADanceは呼び出されません。
1

Iを添加し、メインスレッドにインポート

import android.os.Handler 

Handler handler = new Handler() 
{ 
    @override 
    public void handleMessage(Message msg) 
    { 
     Toast.makeText(getContext,"TRANSFER COMPLETE",TOAST.LENGTH_SHORT).show(); 
    } 

}; 




public void movetoKnox(View view) throws Exception 
     { 
      countp = 0; 
      Runnable r = new Runnable() { 
       @Override 
       public void run() { 

        count = movefileList.size();//4 
        count2 = multiFile.size();//2 
        for (int i =0; i<count; i++) 
        { 
         for(int j=0; j<count2;j++) 
         { 
          if(movefileList.get(i).equals(multiFile.get(j))) 
          { 

           File temp = new File(multiFile.get(j)); 
           try{ 
            //copyFile(temp,chamberLocation); 
            copyFileOrDirectory(multiFile.get(j),chamberLocations); 

           }catch (Exception e) 
           { 
            Log.e(TAG,"Exception Alex: "+e); 
            // Toast.makeText(moveKnox.this, "Exception: "+e,Toast.LENGTH_SHORT).show(); 
           } 

          } 
         } 

        } 

    **handler.sendEmptyMessage(0);** 

       } 

      }; 

    Thread t = new Thread(r); 
      t.start(); 
関連する問題