2

アプリケーションを起動すると、新しいビデオを探してサムネイルを作成し、データベースに追加する Asynctask が開始されます。後で Universal Image Loader を使用して、そのビットマップを見つけてビューに設定します。私の問題は、アプリケーションを初めて起動したときに、すべてのデータがデータベースにロードされたが、グリッドビューに何も表示されないことです。アダプターが呼び出されるとは思いません。ただし、すべてのデータがロードされたらアプリケーションを起動すると、グリッドビューにすべてのサムネイルが表示され、スムーズに実行されます。

なぜこれが起こるのか、この問題を解決するために何ができるのか疑問に思っていました。私のコードは以下です

非同期タスク

private class DataEntry extends AsyncTask<Void, Integer, GridviewData>{
GridviewData dataentry;
DataEntry(GridviewData gridviewdata){
    this.dataentry = gridviewdata;

}

@Override
protected GridviewData doInBackground(Void... params) {

    cursor.moveToFirst();
    do {

        String videoid = cursor.getString(columnindexid);
        String videopath = cursor.getString(columnindexdata);

        int result = dataentry.findVideoID(videoid);
        if (result == 1){
            Bitmap bmthumb = ThumbnailUtils.createVideoThumbnail(videopath, MediaStore.Video.Thumbnails.MINI_KIND);
            if (bmthumb != null) {
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bmthumb.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            byte[] thumbnailBitmapBytes = stream.toByteArray();
            dataentry.addVideoinfo(videoid, videopath, thumbnailBitmapBytes);
            }
        }

        if (result == 0){
            Log.i(TAG, "Cursor wasn't processed, no getcount");
        }
        if(result == 2){
            //there is data already there
        }

    } while (cursor.moveToNext());
    Log.i(TAG, "After dowhile loop");
    cursor.close();

    return dataentry;

}

    }

ベース イメージ ローダー

public class SqliteImageDownloader extends BaseImageDownloader {

private static final String SCHEME_DB = "db";
private static final String DB_URI_PREFIX = SCHEME_DB + "://";
Cursor cursor;

public SqliteImageDownloader(Context context) {
    super(context);
}

@Override
protected InputStream getStreamFromOtherSource(String imageUri, Object extra) throws IOException {
    if (imageUri.startsWith(DB_URI_PREFIX)) {
        String path = imageUri.substring(19);
        cursor = entry.BitFinder(path); 
        byte[] imageData = cursor.getBlob(0);

        return new ByteArrayInputStream(imageData);
    } else {
        return super.getStreamFromOtherSource(imageUri, extra);
    }
}
}

カーソルアダプタ

class VideoAdapter extends CursorAdapter {
Cursor curs;
Context context; 
public VideoAdapter(Context context, Cursor c) {
    super(context, c);
    this.context = context;
    this.curs = c;

}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    ViewHolder holder = (ViewHolder) view.getTag();
    String filepath = curs.getString(videopathindex);

    ImageLoader.getInstance().displayImage("db://VideoandThumbs" + filepath, holder.imageview);

}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View eachgrid = inflater.inflate(R.layout.eachgrid, parent, false);
    ViewHolder holder = new ViewHolder();
    holder.imageview = (ImageView) eachgrid.findViewById(R.id.Imageview1);
    eachgrid.setTag(holder);
    return eachgrid;        
}

    }
4

0 に答える 0