2013-03-12 130 views
0
extends SherlockFragment{ 

我使用福爾摩斯片段和滑動菜單開發應用,並在我的第一frament佈局我必須表現出與URL圖像網格視圖,我已經決定使用Universal Image Loader顯示圖像在片段中的GridView

我可以得到json和所有的值,但是在將適配器設置爲ImageAdapter類中的網格視圖時,我得到了NULL指針異常。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    final View v = inflater.inflate(R.layout.videos_layout, container, 
      false); 
    this.setRetainInstance(true); 
    gridView = (GridView) v.findViewById(R.id.gridview); 
    imageLoader = ImageLoader.getInstance(); 
    return v; 

} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

int i = 0; 
    for (HashMap<String, String> map : VideoItems) { 
     imageUrls[i] = map.get(TAG_THUMNAIL); 
     System.out.println(imageUrls[i]); 
     i++; 

    } 
    defaultOptions = new DisplayImageOptions.Builder().cacheInMemory() 
      .cacheOnDisc().build(); 

    config = new ImageLoaderConfiguration.Builder(getActivity() 
      .getApplicationContext()).defaultDisplayImageOptions(
      defaultOptions).build(); 
    imageLoader.init(config); 
    gridView.setAdapter(new ImageAdapter(getActivity())); 
    gridView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
     } 
    }); 
    this.gridView.setOnScrollListener(new PauseOnScrollListener(
      imageLoader, true, true)); 
} 

public class ImageAdapter extends BaseAdapter { 

    private Context mContext; 
    public ImageAdapter(Context ctx){ 
     mContext=ctx; 
    } 
    @Override 
    public int getCount() { 
     return imageUrls.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 
    public class ViewHolder{ 
     ImageView imageView; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder=new ViewHolder(); 
     Log.v("hi", "hhdsjf"); 
     if (convertView == null) { 
       convertView = LayoutInflater.from(mContext).inflate(
         R.layout.video_layout_item, parent, false); 
      holder.imageView= (ImageView) convertView 
         .findViewById(R.id.image); 

      convertView.setTag(holder); 

      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
     try { 
      imageLoader.displayImage(imageUrls[position], holder.imageView, defaultOptions); 

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

      return convertView; 
    } 
} 

LOG Cat error:

03-12 15:37:47.164: E/AndroidRuntime(9671): java.lang.NullPointerException 

03-12 15:37:47.164:E/AndroidRuntime(9671):在com.slidingmenu.example.fragments.VideosFragment.onActivityCreated(VideosFragment.java:112) 03 -12 15:37:47.164:E/AndroidRuntime(9671):at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:891) 03-12 15:37:47.164:E/AndroidRuntime(9671) :at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 03-12 15:37:47.164:E/AndroidRuntime(9671):at android.support.v4.app.BackStackRecord.run( BackStackRecord.java: 622) 03-12 15:37:47.164:E/AndroidRuntime(9671):at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 03-12 15:37:47.164:E/AndroidRuntime(9671):在android.support.v4.app.FragmentManagerImpl $ 1.run(FragmentManager.java:420) 03-12 15:37:47.164:E/AndroidRuntime(9671):at android.os.Handler.handleCallback (Handler.java:587) 03-12 15:37:47.164:E/AndroidRuntime(9671):at android.os.Handler.dispatchMessage(Handler.java:92) 03-12 15:37:47.164:E/AndroidRuntime(9671):at android.os.Looper.loop(Looper.java:130) 03-12 15:37:47.164:E/AndroidRuntime(9671):at android.app.ActivityThread.main(ActivityThread.java :3687) 03-12 15:37:47.164:E/AndroidRuntime(9671):at java.lang.reflect.Method.invokeNative(Native Method) 03-12 15:37:47.164:E/AndroidRuntime(9671):在java.lang.reflect.Method.invoke(Method.java:507) 03-12 15:37:47.164:E/AndroidRuntime(9671) :at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:867) 03-12 15:37:47.164:E/AndroidRuntime(9671):at com.android.internal.os.ZygoteInit。主(ZygoteInit.java:625) 03-12 15:37:47.164:E/AndroidRuntime(9671):在dalvik.system.NativeStart.main(本機方法)

i couldn't find where i missed to initialize something., Thanks in advance.,

+0

看線112 – jlopez 2013-03-12 09:18:28

+0

this.gridView.setAdapter(新ImageAdapter(getActivity())); 這是我的112線,這有什麼問題? – 2013-03-12 09:19:41

+0

NullPointerException在這些行 – jlopez 2013-03-12 09:23:40

回答

0

嘗試此..

1.默認情況下,緩存未啓用。如果你想加載的圖像將被緩存在內存和/或光盤上,那麼你應該啓用緩存在DisplayImageOptions這樣:

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() 
    .cacheInMemory() 
    .cacheOnDisc() 
    .build(); 

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) 
     .defaultDisplayImageOptions(defaultOptions) 
     .build(); 
ImageLoader.getInstance().init(config); 

變化這在你的適配器..

public class ImageAdapter extends BaseAdapter { 
private Context mContext; 

public ImageAdapter(Context ctx) { 
    mContext = ctx; 
} 

@Override 
public int getCount() { 
    return imageUrls.length; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 
public class ViewHolder { 

    ImageView imageView; 

} 

if (convertView == null) { 
    convertView = LayoutInflater.from(mContext).inflate(
      R.layout.video_layout_item, parent, false); 
holder.imageView= (ImageView) convertView 
      .findViewById(R.id.imageViewid); 

convertView.setTag(holder); 

} else { 
    holder = (ViewHolder) convertView.getTag(); 
} 

    try { 
imageLoader.displayImage(imageUrls[position], holder.imageView, defaultOptions); 

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

return convertView; 

} 試試這個在你的類`VideosFragment.java`設置適配器

ImageAdapter adapter = new ImageAdapter(this); 
      gridView.setAdapter(adapter); 
+0

我已更新我的代碼,但它不起作用。,仍爲空指針異常;我做錯了什麼? – 2013-03-12 09:15:01

+0

它只在這些行中給出錯誤 gridView.setAdapter(new ImageAdapter(getActivity())); 它不叫那個類。, – 2013-03-12 10:05:44

+0

我已經放置了完整的代碼。, gridView.setAdapter(new ImageAdapter(getActivity())); 爲這條線我總是nullpointer。,它怎麼可能。是不是錯誤的陳述? – 2013-03-12 10:19:19