2012-02-04 2 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(); 

    } 
} 

Ошибка:PostExecute() AsyncTask не загружается. Где я иду не так?

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

+0

опубликуйте вывод logcat в вопросе, чтобы получить лучшую идею. –

+0

Выложили новый код и вывод logcat. – Hick

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 не на Основной класс активности. –

Смежные вопросы