如何从另一个java类创建AsyncTask对象,它是MainActivity的内部类

时间:2015-12-21 16:55:54

标签: android android-asynctask

我正在创建一个从Tmdb Api获取电影列表的应用程序。 我的代码是主要的Activity是

public class MainActivityFragment extends Fragment { 
  public class FetchImageTask extends AsyncTask<...>{ 
    //
  }
}

我还有另一个适配器类

public class MovieAdapter extends ArrayAdapter<MovieImage> {

private static int page_nmber = 1;

public MovieAdapter(Context context, List<MovieImage> objects) {
    super(context, 0 , objects);
}

final String LOG_TAG = MovieAdapter.class.getSimpleName();

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if(getCount() == position + 5 ){
        //Log.v(LOG_TAG, " last two images");
    }

    MovieImage movieImage = getItem(position);

    View rootView = LayoutInflater.from(getContext())
                    .inflate(R.layout.list_item_movie, parent, false);

    ImageView imageView = (ImageView) rootView.findViewById(R.id.list_item_movie_image);
    Picasso.with(getContext()).load(movieImage.getImage_path())
            .placeholder(R.drawable.loading)
            .fit()
            .into(imageView);

    return rootView;
}

public void fetchExtraImages(){
    MainActivityFragment.FetchImageTask fetchImageTask;
    fetchImageTask = new MainActivityFragment.FetchImageTask();
    //Gives me error saying this is not an enclosing class
}

实际上我想为FetchImageTask对象创建另一个对象并调用下一页(第2页) 结果并将结果附加到相应的适配器。

感谢任何帮助。 :)

1 个答案:

答案 0 :(得分:2)

我建议您不要在活动中使用异步任务。

1 - 您可能必须使用另一个classactivityfragment

执行相同的任务

2 - 您的活动将承担单一责任(SOLID)

3 - 您可以使用callbacksactivityfragment或任何class进行通信。

创建interface分隔:

public interface FetchImageCallback{
   void onImageFetched(OBJECT);//replace by your 
}

让您的活动implements FetchImageCallback,以便您可以获取图片,例如:

public class MainActivityFragment extends Fragment implements FetchImageCallback{

 public void fetchExtraImages(){
   FetchImageTask fetchImageTask = new FetchImageTask(this); //this is your callback
 }

 void onImageFetched(OBJECT){
     //do what you want to do with the images fetched (OBJECT)
 }
}

如果你真的想用作内部类(不推荐),只需将FetchImageTask声明为静态类:

public static class FetchImageTask{
  //some code
}