2014-02-08 46 views
0

我在一个类中有两个asynctask,并且在同时执行它们时遇到问题。 这是我的场景,我的用户点击查看一月日历按钮,它会显示日历月份和评论的事件。事件和评论存储在MySQL数据库,所以我不得不取得不同的网址。我用asyctask来获取网址。每当我打电话给其他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(); 
       } 

      } 

} 

}

+1

你会得到什么错误? “无法解决”是什么意思? – fiddler

+0

确实错误stacktrace会有帮助 – injecteer

回答

1

你的第二个的AsyncTask public class LoadCommentCal extends AsyncTask是第一的AsyncTask里面! 你需要将它移出第一个asynctask。

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

... other functions 

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

您声明很多事情第一的AsyncTask我强烈reccomend的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内,然后除去沉在Java文件的最后一个}(也重新缩进如果你愿意)