0
extends SherlockFragment{

シャーロックフラグメントとスライディングメニューを使用してアプリケーションを開発しています。最初のフレームのレイアウトでは、URLからの画像を含むグリッドビューを表示する必要があります。ユニバーサルイメージローダーを使用することにしました。

そして、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エラー:

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) :android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:891)03-12 15:37:47.164:E / AndroidRuntime(9671):android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager .java:1080)03-12 15:37:47.164:E / AndroidRuntime(9671):android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)03-12 15:37:47.164:E /AndroidRuntime(9671):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):android.osで。Handler.handleCallback(Handler.java:587)03-12 15:37:47.164:E / AndroidRuntime(9671):android.os.Handler.dispatchMessage(Handler.java:92)03-12 15:37:47.164: E / AndroidRuntime(9671):android.os.Looper.loop(Looper.java:130)03-12 15:37:47.164:E / AndroidRuntime(9671):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):at java.lang.reflect.Method.invoke(Method.java:507)03-12 15:37:47.164:E / AndroidRuntime(9671):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java :867)03-12 15:37:47.164:E / AndroidRuntime(9671):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)03-12 15:37:47.164:E / AndroidRuntime (9671):dalvik.systemで。NativeStart.main(ネイティブメソッド)

何かを初期化するのに失敗した場所が見つかりませんでした。、よろしくお願いします。、

4

1 に答える 1

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;

これを試してアダプタを設定してください

ImageAdapter adapter = new ImageAdapter(this);
            gridView.setAdapter(adapter);
于 2013-03-12T08:47:45.200 に答える