2016-10-25 11 views
0

ここに私のコードです。スレッドは1回だけ実行されます

public void showCallFragment(){ 

     address_phone = new ArrayList<>(); 
      Thread thread1 = new Thread(new Runnable() { 
       @Override 
       public void run() { 

        OyumDataBaseHelper dbh = new OyumDataBaseHelper(Address_Activity.this); 

        dbh.OpenDatabase(); 
        for (int i = 0; i < addressIds.size(); i++) { 
         Cursor cr1 = dbh.getPhone(addressIds.get(i)); 

         cr1.moveToFirst(); 

         ArrayList<String> phoneList = new ArrayList<>(); 

         do { 
     phoneList.add(cr1.getString(cr1.getColumnIndex(TableData.TableInfo.ph_phone_number))); 

         } while (cr1.moveToNext()); 

         address_phone.add(phoneList); 

         cr1.close(); 

        } 

       } 
      }); 

      thread1.start(); 
    } 

この関数は、OnCreate(Bundle)メソッドから呼び出されています。私は自分のアクティビティでリストビューを使用しています。リストビューはonClick関数でdialogFragmentを開きます。問題は、以前のアクティビティに戻り、リストビューのアクティビティを開くときです。今回はonClick関数にエラーがあります。関数showDialogFragment()は実行されますが、スレッドはまったく動作しません! )以前の活動に行くとき

1)、onResumeあなたの方法を起動させる方法()メソッドはありません再びのonCreate((と呼ばれている):

答えて

0

あなたは

Thread thread1 = new Thread() { 
     public void run() { 
      try { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
      //your code here 
        } 
       }); 
       Thread.sleep(500); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    thread1.start(); 
+0

グレート代わりに、簡単なAsyncTaskを使用することができます!この解決法はうまくいかなかったが、うまくいかなかった? –

+0

@ Yo'dilawar、あなたは睡眠機能を逃しています。また、この回答をupvoteしてください...ありがとう –

0

ことを覚えておいてください。したがって、関数は再び開始しません。

2)スレッドは、アクティビティのライフサイクルを制御するメインスレッドには属しません。つまり、起動されたスレッドは、すべての実行が完了するまでループを継続し、停止します。そのライフサイクルは、さまざまなアクティビティの1つに依存しません。

スレッドが停止し、元に戻ったときに再び起動されないと思います。

0

。これはあなたを助けることができる、この希望に試すことができますがそれはあなたがそこに持っているもののような状況のためにスレッドを使用することがベストプラクティスとはみなされません。 https://developer.android.com/reference/android/os/AsyncTask.html

static class GrabAddressesTask extends AsyncTask<SQLiteOpenHelper,Void, List<String>>{ 

    @Override 
    protected List<String> doInBackground(SQLiteOpenHelper... params) { 
     final List<String> addresses=new ArrayList<>(); 
     final SQLiteDatabase db=params[0].getReadableDatabase(); 
     try{ 
      // get your addresses here and update the List 
     } 
     finally { 
      db.close(); 
     } 
     return addresses; 
    } 

    @Override 
    protected void onPostExecute(List<String> stringList) { 
     super.onPostExecute(stringList); 
     // update your UI in here 
     // make sure you do not keep a strong reference to you Activity/Fragment in this class 
     // if you need a reference just use a WeakReference 
    } 
} 

そして、あなたはそれを使用することができます方法:

new GrabAddressesTask().execute(sqlOpenHelper); 
関連する問題