2012-02-04 36 views
0
 package com.crumbin.tabs; 

//java package 
import java.io.IOException; 
import java.util.ArrayList; 

import org.json.JSONException; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.widget.ListView; 

import com.crumbin.main.R; 
import com.crumbin.models.User; 
import com.crumbin.utilities.UserFollowingListAdapter; 


public class HomeActivity extends Activity{ 

    final ArrayList<User> users1 = new ArrayList<User>(); 
    User user; 
// public ArrayList<User> users1 = new ArrayList<User>(); 
    private UserFollowingListAdapter csl; 
     private ListView lv; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.user_main_tab_home); 
     lv = (ListView) findViewById(R.id.user_crumbs_list); 

    // ListView lv = (ListView) findViewById(R.id.user_crumbs_list); 








     AsyncLoader task = new AsyncLoader(); 
     task.execute(); 




     } 



     private class AsyncLoader extends AsyncTask<String,Void, String> { 
       ProgressDialog dialog; 

      @Override 

      protected void onPreExecute(){ 
       String pa = "helllo"; 
        return; 

      } 

      @Override 
      protected String doInBackground(String... pa) { 
       String response = ""; 



        try { 

         try { 
          user = new User("4eeb34c6d80e8f1214000000"); 
          user.getFollowingCrumbsUpList(); 
          for(User u : user.following){ 
           users1.add(u); 
          } 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } catch (JSONException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 








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

      return response; 
      } 

      protected void onPostExecute(String result) { 
       //dialog.dismiss(); 
       ListView lv = (ListView) findViewById(R.id.user_crumbs_list); 

       final UserFollowingListAdapter csl = new UserFollowingListAdapter(HomeActivity.this,R.layout.user_crumbs_list_item,users1,this); 
        lv.setAdapter(csl); 
       return; 

      } 





     } 





     public void showError(){ 
     new AlertDialog.Builder(this) 
     .setTitle(" Oops , Server down :(") 
     .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface arg0, int arg1) { 
       // TODO Auto-generated method stub 

      } 
      // 
     }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       // Do nothing. 
      } 
     }).show(); 

    } 
} 

錯誤:AsyncTask的PostExecute()不加載。我哪裏錯了?

02-04 13:11:34.596: E/AndroidRuntime(2464): FATAL EXCEPTION: main 
02-04 13:11:34.596: E/AndroidRuntime(2464): java.lang.ClassCastException: com.crumbin.tabs.HomeActivity$AsyncLoader cannot be cast to android.app.Activity 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at com.crumbin.utilities.UserFollowingListAdapter.<init>(UserFollowingListAdapter.java:40) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at com.crumbin.tabs.HomeActivity$AsyncLoader.onPostExecute(HomeActivity.java:106) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at com.crumbin.tabs.HomeActivity$AsyncLoader.onPostExecute(HomeActivity.java:1) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at android.os.AsyncTask.finish(AsyncTask.java:602) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at android.os.AsyncTask.access$600(AsyncTask.java:156) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at android.os.Looper.loop(Looper.java:137) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
02-04 13:11:34.596: E/AndroidRuntime(2464):  at dalvik.system.NativeStart.main(Native Method) 

沒有數據加載。該循環甚至沒有達到OnpostExecute()。什麼可能是錯誤?我沒有得到錯誤。只是它甚至沒有達到那個部分。

我想這樣做是:

的數據只是加載到一個列表。就是這樣。而這仍然不起作用。邏輯很好。這工作,如果我沒有使用AsyncTask。但是,如果我把代碼放在裏面,它不起作用。

回答

2

您的AsyncTask類應該在onCreate()之外,不在onCreate()之內。

 UserFollowingListAdapter csl; 

    @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.user_main_tab_home); 
      ............. 
      ListView lv = (ListView) findViewById(R.id.user_crumbs_list); 

      csl = new UserFollowingListAdapter(HomeActivity.this, 
            R.layout.user_crumbs_list_item,users1,this); 
      lv.setAdapter(csl); 
      new AsyncLoader().execute(user); 
    } 
class AsyncLoader extends AsyncTask<User,Void, String> { 

    .................. 
    protected void onPostExecute(String result) { 
     csl.notifyDataSetChanged(); // refresh your ListView 
    } 
} 
+0

我得到這個錯誤:活動已泄露窗口[email protected],最初在此處添加 – Hick 2012-02-04 12:37:18

+0

在問題中發佈logcat輸出以獲得更好的主意。 – 2012-02-04 12:47:21

+0

已發佈新代碼和logcat輸出。 – Hick 2012-02-04 13:15:37

0

remvove線

dialog.dismiss(); 

從doInBackground()來postExecute()

和寫入按照postExecute()方法的代碼:

csl = new UserFollowingListAdapter(HomeActivity.this,R.layout.user_list_item,users1,this); 
lv.setAdapter(csl); 
+1

在'postExecute()'裏面你不能使用'this',因爲它會引用AsyncTask而不是主Activity類。 – 2012-02-04 13:21:26