2013-07-18 51 views
1

我試圖使用通用圖像加載器,在一個片段中,但我得到空指針異常。原始流程如下所示:Android - 用片段擴展另一個類

Activity A extends AbsListViewBaseActivity 
{ 
public class ImageAdapter extends BaseAdapter { 
//this flow is working, images are showing 
imageLoader.displayImage(values2.get(position).get(TAG_IMAGE_NAME2).toString(), holder.image, options2); 
} 
} 

AbsListViewBaseActivity extends BaseActivity 
{ 
    public ImageLoader imageLoader = ImageLoader.getInstance(); 
} 

使用片段,我想複製上面的實現,但我在imageLoader中獲得空指針。我不能做的唯一的事情就是延長AbsListViewBaseActivity與也延伸了BaseActivity(誰初始化ImageLoader的一種),因爲下方延伸的Fragment

public class CollectionDemoActivity extends FragmentActivity { 
static ImageAdapter imageAptr ; 
public BaseActivity base; 

public static class DemoObjectFragment extends Fragment { 
((GridView) absList.listView).setAdapter(imageAptr); 
} 

public class ImageAdapter extends BaseAdapter { 
//Getting Errors in here/ null pointer 
base.imageLoader.displayImage("Image Path", holder.image, options2); 
} 

} 

logcat的:

07-18 18:49:36.073: E/AndroidRuntime(20970): FATAL EXCEPTION: main 
07-18 18:49:36.073: E/AndroidRuntime(20970): java.lang.NullPointerException 
07-18 18:49:36.073: E/AndroidRuntime(20970): at com.jinisys.restoplusordering.CollectionDemoActivity$ImageAdapter.getView(CollectionDemoActivity.java:403) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.widget.AbsListView.obtainView(AbsListView.java:2267) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.View.measure(View.java:15181) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.View.measure(View.java:15181) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1447) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.View.measure(View.java:15181) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.View.measure(View.java:15181) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.widget.LinearLayout.measureVertical(LinearLayout.java:833) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.View.measure(View.java:15181) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.View.measure(View.java:15181) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.Choreographer.doFrame(Choreographer.java:525) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.os.Handler.handleCallback(Handler.java:615) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.os.Looper.loop(Looper.java:137) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at android.app.ActivityThread.main(ActivityThread.java:4745) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at java.lang.reflect.Method.invokeNative(Native Method) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
07-18 18:49:36.073: E/AndroidRuntime(20970): at dalvik.system.NativeStart.main(Native Method) 
+1

也許'CollectionDemoActivity'應該擴展'AbsListViewBaseActivity'而不是'FragmentActivity'。如果這不適用,則應該將舊項目作爲外部項目/庫包含,以便直接使用'public class ImageAdapter'。 – g00dy

+0

Imageloader在使用前需要進行配置和構建! –

+0

@ g00dy,你能指導我創建一個從我以前的項目中創建一個庫,基本上只有兩個涉及類的AbsListViewBaseActivity和BaseActivity以及Universal-Image-Loader.jar。因此,如何在Eclipse中創建一個新的庫?您的幫助將不勝感激。 – rahstame

回答

2

Imageloader需要在BaseAdapter類中進行配置,所以自上述代碼以來我所做的事情相當混亂。我直接在我的主要活動中使用這個:BaseActivity.imageLoader.init(ImageLoaderConfiguration.createDefault(getBaseContext()));而不是依靠AbsListViewBaseActivity類中的配置。