显示图像在片段中的GridView
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.,
尝试此..
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);
我已更新我的代码,但它不起作用。,仍为空指针异常;我做错了什么? – 2013-03-12 09:15:01
它只在这些行中给出错误 gridView.setAdapter(new ImageAdapter(getActivity())); 它不叫那个类。, – 2013-03-12 10:05:44
我已经放置了完整的代码。, gridView.setAdapter(new ImageAdapter(getActivity())); 为这条线我总是nullpointer。,它怎么可能。是不是错误的陈述? – 2013-03-12 10:19:19
看线112 – jlopez 2013-03-12 09:18:28
this.gridView.setAdapter(新ImageAdapter(getActivity())); 这是我的112线,这有什么问题? – 2013-03-12 09:19:41
NullPointerException在这些行 – jlopez 2013-03-12 09:23:40