2017-01-03 3 views
0

バックグラウンドで実行するasynctaskと、新しいリストビューを持つWebサービスから何かをロードするためのもう1つのアスンカスクを取得しようとしています。asyntaskを同時に実行しています(アンドロイド)

ここに私のコードです。

AsyncCallForwardListWS

private class AsyncCallForwardListWS extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     //List<Request_model> thisList = newList; 
     //List<Tn_Parent> thisList = listDataParent; 
     List<Request_model> thisList = lvList; 
     System.out.println("there2: " + thisList.size()); 
     for (int y = 0; y< thisList.size(); y++){ 
      //Request_model model = thisList.get(y); 
      //Tn_Parent model = thisList.get(y); 
      Request_model model = thisList.get(y); 
      if(model.isSelected()){ 
       if(action.equals("deny")){ 
        //getComment = model.getApproverComment(); 
        getComment = model.getApprComments(); 
       }else 
        getComment = "This request is " + ACTION_MSG + " by " + model.getUser_fullName() + " via mobile app"; 
       //getComment = "This request is " + ACTION_MSG + " by " + model.getApproverName() + " via mobile app"; 
       taskActivity_forward = model.getTaskActivity(); 

       getRequestID = model.getRequestId(); 
       System.out.println("testing"); 

       db.addInfo(new Request_model(model.getRequestId())); 
       System.out.println("requestid: " + getRequestID); 

       ForwardWebService(); 

      } 
     } 
     return null; 
    } 

AsyncCallListWS

private class AsyncCallListWS extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     progressDialog = new ProgressDialog(getActivity()); 
     progressDialog.show(); 
     progressDialog.setContentView(R.layout.custom_progressbar); 
     progressDialog.setCanceledOnTouchOutside(false); 
     progressDialog.setCancelable(false); 
     TextView textView1 = (TextView) progressDialog.findViewById(R.id.textView1); 
     Typeface dsr = Typeface.createFromAsset(getActivity().getAssets(), getResources().getString(R.string.droid_sans)); 
     textView1.setTypeface(dsr); 
     System.out.println("here1"); 

     isThereAnyRequest = false; 

     if(lvAdapter!=null) { 
      lvAdapter.clear(); 
      lvAdapter.notifyDataSetChanged(); 
     } 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     //listDataParent = new ArrayList<Tn_Parent>(); 
     listPending(); 
     System.out.println("here2"); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     dismissLoadingDialog(); 
     System.out.println("here3"); 
     selectAll.setChecked(false); 

     if(getContext()!=null) { 
      lvAdapter = new Tn_ListViewAdapter(getActivity(), lvList, selectAll); 
      listView.setAdapter(lvAdapter); 

      progressDialog.dismiss(); 
     } 


     if (isThereAnyRequest){ 

      buttonLayout.setVisibility(View.VISIBLE); 
      //selectAll.setVisibility(View.VISIBLE); 
      checkBox_layout.setVisibility(View.VISIBLE); 
      //textView.setVisibility(View.GONE); 
      no_request_noti.setVisibility(View.GONE); 
     } 

     else{ 
      buttonLayout.setVisibility(View.INVISIBLE); 
      //selectAll.setVisibility(View.INVISIBLE); 
      checkBox_layout.setVisibility(View.GONE); 
      //textView.setVisibility(View.VISIBLE); 
      no_request_noti.setVisibility(View.VISIBLE); 
     } 


    } 
} 
} 

私はasynctaskをトリガする他に、このどこかに持っています。

new AsyncCallForwardListWS().execute(); 
new AsyncCallListWS().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

どちらasynctasksは、実際には同じ時間に一緒に実行が、それはAsyncCallForwardListWSでforループのループ私が選択したチェックボックスの数に応じないように奇妙です。助けてください。

+0

を試してみませんか?あなたのリストアダプターと 'lvList'の項目をどのように変更して' isSelected'にするのですか? – Divers

+0

ローダーを表示せずに、バックグラウンドで1つのタスクを実行することができます。 –

+0

@Diversこれは、チェックボックスが正常であることを確認したためです。問題はasynctaskのforループです。私が選択したチェックボックスの数に応じてループしていません。 –

答えて

0

しましたSystem.out.println( "there2:" + thisList.size());リストの正確な数を表示しますか? あなたはすべてのそのコードと「非同期」AsyncTasksに関するすべての説明を掲載なぜ実際の質問は `ListView`または` RecyclerView`の項目をチェックする程度であれば、

List<Request_model> thisList=new List<Request_model>(); 
thisList.addAll(lvList); 
//at post of 
List<Request_model> thisList = lvList; 
+0

@Mahdouaniはい。リストのサイズは正しいです私はなぜforループがループしていないのだろうと思っています –

関連する問題