片段 - 使用AsyncTask

时间:2011-11-24 11:48:53

标签: android android-fragments

在Fragment类中,我试图调用一个AsyncTask类,在doInBackground()中我试图获取Currentlocation并设置为TextView。

但是当我试图这样做时,它显示出错误,

E/AndroidRuntime(645): Caused by: java.lang.ClassCastException:com.example.MainFragmentActivity

从扩展FragmentActivity的MainFragmentActivity中,我设置了一个名为FragmentPagerAdapter的适配器,并在override getItem()的这个适配器中调用了这个片段,如下所述,

@Override
public Fragment getItem(int position) {
    if (position == 0) {
        Log.i(TAG, "before return in adapter postion 0");
        return ViewPageFragment.newInstance(CONTENT[position % CONTENT.length], context);
    }
}

这是我的代码, http://pastebin.com/gykkETJV

我该如何解决这个问题?

堆栈跟踪:

 E/ViewPageFragment(420): java.lang.ClassCastException: com.example.MainFragmentActivity
 E/ViewPageFragment(420): com.example.ViewPageFragment$LocationTask.doInBackground(ViewPageFragment.java:145)
 E/ViewPageFragment(420): com.example.ViewPageFragment$LocationTask.doInBackground(ViewPageFragment.java:1)
 E/ViewPageFragment(420): android.os.AsyncTask$2.call(AsyncTask.java:185)
 E/ViewPageFragment(420): java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
 E/ViewPageFragment(420): java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
 E/ViewPageFragment(420): java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
 E/ViewPageFragment(420): java.lang.Thread.run(Thread.java:1096)

1 个答案:

答案 0 :(得分:0)

看到ViewPageFragment的ClassCastException和第145行是:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 10, (LocationListener)context);

导致错误的原因可能是context未扩展/实施LocationListener

由于我希望ViewPageFragment扩展Fragment,您可以使用getActivity()代替context作为最后一个参数。请记住,如果这样做,实例化Activity的{​​{1}}必须扩展/实施ViewPageFragment