2014-02-08 5 views
0

한 클래스에 두 개의 asynctask가 있는데 동시에 실행하는 데 문제가 있습니다. 여기 내 시나리오가 있습니다. 내 사용자가 1 월 달력보기 단추를 클릭하면 달력의 달 이벤트와 주석이 표시됩니다. 이벤트와 코멘트는 mysql 데이터베이스에 저장되어 있으므로 다른 URL을 가져와야합니다. 나는 asyctask를 사용하여 URL을 가져 왔습니다. 다른 asynctask를 호출 할 때마다이를 해결할 수 없습니다. 도와주세요!Asynctask를 동시에 실행하는 방법

package sscr.stag; 




@SuppressLint("ShowToast") 
public class Calendar extends ListActivity { 
// All xml labels 

TextView txtEvent; 


// Progress Dialog 
private ProgressDialog pDialog; 

JSONArray user; 
JSONObject hay; 
private static final String CALENDAR_URL = "http://www.stagconnect.com/StagConnect/calendar/januaryCalendar.php"; 
private static final String COMMENT_URL = "http://www.stagconnect.com/StagConnect/calendar/januaryReadComment.php"; 
private static final String TAG_USER = "username"; 
private static final String TAG_MESSAGE = "message"; 
private static final String TAG_TIME = "time"; 
private static final String TAG_ARRAY = "posts"; 
private JSONArray mCalendar = null; 
private ArrayList<HashMap<String, String>> mCommentList; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.calendaradmin); 

    txtEvent = (TextView) findViewById(R.id.event); 

    new LoadCalendar().execute(); 
    new LoadCommentCal().execute(); // error here, says cannot be resolved in this type 

} 


private class LoadCalendar extends AsyncTask<String, String, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(Calendar.this); 
     pDialog.setMessage("Loading Calendar.. "); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 

    } 

    protected String doInBackground(String... args) { 
     String json = null; 


     try { 

      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(CALENDAR_URL); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity resEntity = response.getEntity(); 
      json = EntityUtils.toString(resEntity); 

      Log.i("Profile JSON: ", json.toString()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return json; 
    } 

    @Override 
    protected void onPostExecute(String json) { 
     super.onPostExecute(json); 

     pDialog.dismiss(); 
     try 
     { 
     hay = new JSONObject(json); 
     JSONArray user = hay.getJSONArray("posts"); 
     JSONObject jb= user.getJSONObject(0); 
     String event = jb.getString("activities"); 
     txtEvent.setText(event); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 

     public void updateJSONdata() { 
      mCommentList = new ArrayList<HashMap<String, String>>(); 
      JSONParser jParser = new JSONParser(); 
      JSONObject json = jParser.getJSONFromUrl(COMMENT_URL); 

      try {  
       mCalendar = json.getJSONArray(TAG_ARRAY); 
       for (int i = 0; i < mCalendar.length(); i++) { 

        JSONObject c = mCalendar.getJSONObject(i);    

        String username = c.getString(TAG_USER); 
        HashMap<String, String> map = new HashMap<String, String>(); 


        map.put(TAG_USER, username); 


        mCommentList.add(0, map); 

       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 

     private void updateList() { 
      ListAdapter adapter = new SimpleAdapter(Calendar.this, mCommentList, 
       R.layout.calendar_comment, new String[] { TAG_MESSAGE, 
         TAG_USER, TAG_TIME }, new int[] { R.id.message, 
         R.id.username, R.id.time }); 


     setListAdapter(adapter); 

     ListView lv = getListView();  
     lv.scrollTo(0, 0);  

     } 

     public class LoadCommentCal extends AsyncTask<Void, Void, String> { 

       @Override 
       protected void onPreExecute() { 
        super.onPreExecute(); 
        pDialog = new ProgressDialog(Calendar.this); 
        pDialog.setMessage("Loading Comments..."); 
        pDialog.setIndeterminate(false); 
        pDialog.setCancelable(true); 
        pDialog.show(); 
       } 

       @Override 
       protected String doInBackground(Void... args) { 
        updateJSONdata(); 
        return null; 

       } 



       @Override 
       protected void onPostExecute(String result) { 
        super.onPostExecute(result); 
        pDialog.dismiss(); 
        updateList(); 
       } 

      } 

} 

} public class LoadCommentCal extends AsyncTask 처음 AsyncTask를 내부에

+1

어떤 오류가 발생합니까? "해결할 수 없다"는 것은 무엇을 의미합니까? – fiddler

+0

참으로 stacktrace 오류가 도움이 될 것입니다. – injecteer

답변

1

두 번째 AsyncTask를 :

여기 내 코드입니다! 첫 번째 asynctask 밖으로 이동해야합니다.

private class LoadCalendar extends AsyncTask<String, String, String> { 
... 
} 

... other functions 

private class LoadCommentCal extends AsyncTask<Void, Void, String> { 
... 
} 
0

당신은 내가 강하게 onPostExecute

@Override 
    protected void onPostExecute(String json) { 
     super.onPostExecute(json); 

     pDialog.dismiss(); 
     try 
     { 
     hay = new JSONObject(json); 
     JSONArray user = hay.getJSONArray("posts"); 
     JSONObject jb= user.getJSONObject(0); 
     String event = jb.getString("activities"); 
     txtEvent.setText(event); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 
} 

후 AsyncTask를 닫습니다 권하고 처음 AsyncTask를 내부에 많은 것들을 선언하고 자바 파일의 끝에 하나 } (도 reindent을 제거 원하는 경우)

관련 문제