关于datebase,cursor的一些异常 android.database.CursorWindowAllocationException: Cursor window allocation of
来源:互联网 发布:微网站源码 编辑:程序博客网 时间:2024/06/05 22:47
原来测试的时候没有报错,现在出现好多蓝色提示,并且有时候程序会崩溃,我出现过以下几个错误
android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed even after closing cursor
android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=705 (# cursors opened by this proc=705)
出现这个的话一般是以下几种情况
cursor是否为空没有判断
datebase没有关闭
cursor没有关闭
ok,下面上两段代码:
import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;/** * Created by fanyafeng on 2015/7/28/0028. */public class CollectTableCourse { private static final String RECORDTABLE = "t_collect"; private SQLiteDatabase db = null; public CollectTableCourse(SQLiteDatabase db) { this.db = db; } public Boolean searchCollect(String v_id) { String sql = "SELECT v_id FROM " + RECORDTABLE + " WHERE v_id = ?"; String searchField[] = new String[]{v_id}; Cursor result = this.db.rawQuery(sql, searchField); if (result != null) { result.moveToFirst(); } if (result.getCount() == 0) { result.close(); this.db.close(); return true; } else { result.close(); this.db.close(); return false; } }}
import android.content.Context;import android.graphics.Bitmap;import android.support.v4.util.LruCache;import android.support.v4.view.ViewPager;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.cj.dreams.video.R;import com.cj.dreams.video.bean.VideoListBean;import com.cj.dreams.video.dbhelper.CollectTableCourse;import com.cj.dreams.video.dbhelper.GoodTableCourse;import com.cj.dreams.video.dbhelper.LaughSQLiteOpenHelper;import com.cj.dreams.video.dbhelper.RecordTableCourse;import com.cj.dreams.video.dboperate.CollectOperate;import com.cj.dreams.video.dboperate.GoodOperate;import com.cj.dreams.video.dboperate.RecordOperate;import FanYaFeng.L;import com.cj.dreams.video.util.ListViewImageTaskUtil;import FanYaFeng.PostUtil;import com.cj.dreams.video.util.T;import java.io.IOException;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;/** * Created by fanyafeng on 2015/7/7/0007. */public class VideoListAdapter extends ABaseAdapter { private Context context; private List<VideoListBean> videoListBeanList; private LaughSQLiteOpenHelper laughSQLiteOpenHelper; private RecordOperate recordOperate; private CollectOperate collectOperate; private GoodOperate goodOperate; //用来记录播放状态的图标显示,测试 private ViewHolder holder; // 获取当前应用程序所分配的最大内存 private final int maxMemory = (int) Runtime.getRuntime().maxMemory(); // 只用五分之一用来做图片缓存 private final int cacheSize = maxMemory / 5; private LruCache<String, Bitmap> mLruCache = new LruCache<String, Bitmap>( cacheSize) { // 重写sizeof()方法 @Override protected int sizeOf(String key, Bitmap bitmap) { // TODO Auto-generated method stub // 这里用多少kb来计算 return bitmap.getRowBytes() * bitmap.getHeight() / 1024; } }; public VideoListAdapter(Context context, List<VideoListBean> videoListBeanList) { this.context = context; this.videoListBeanList = videoListBeanList; } public void update() { notifyDataSetChanged(); } @Override public int getCount() { return videoListBeanList.size(); } @Override public Object getItem(int position) { return videoListBeanList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, final ViewGroup parent) { View view = convertView; if (view == null) { view = LayoutInflater.from(context).inflate(R.layout.item_activity_video_list, null); holder = new ViewHolder(); view.setTag(holder); holder.item_background=(LinearLayout)view.findViewById(R.id.item_background); holder.videoListIcon = (ImageView) view.findViewById(R.id.videolist_icon); holder.videoListTitle = (TextView) view.findViewById(R.id.videolist_title); holder.videoPlayTimes = (TextView) view.findViewById(R.id.videolist_play_times); holder.videoCollectTimes = (TextView) view.findViewById(R.id.videolist_collect_times); holder.videoGoodTimes = (TextView) view.findViewById(R.id.videolist_good_times); holder.videoPlayIcon = (ImageView) view.findViewById(R.id.videolist_play_icon); holder.videoCollectIcon = (ImageView) view.findViewById(R.id.videolist_collect_icon); holder.videoGoodIcon = (ImageView) view.findViewById(R.id.videolist_good_icon); } else { holder = (ViewHolder) convertView.getTag(); } laughSQLiteOpenHelper = new LaughSQLiteOpenHelper(context); laughSQLiteOpenHelper.getWritableDatabase(); if (new RecordTableCourse(laughSQLiteOpenHelper.getReadableDatabase()).searchRecord(videoListBeanList.get(position).getVideoId())) { holder.videoPlayIcon.setImageResource(R.drawable.icon_bof); } else { holder.videoPlayIcon.setImageResource(R.drawable.icon_bof_d); } holder.videoCollectIcon.setOnClickListener(new collectClick(position)); if (new CollectTableCourse(laughSQLiteOpenHelper.getReadableDatabase()).searchCollect(videoListBeanList.get(position).getVideoId())) { holder.videoCollectIcon.setImageResource(R.drawable.icon_shouc); } else { holder.videoCollectIcon.setImageResource(R.drawable.icon_shouc_d); } holder.videoGoodIcon.setOnClickListener(new goodClick(position)); if (new GoodTableCourse(laughSQLiteOpenHelper.getReadableDatabase()).searchGood(videoListBeanList.get(position).getVideoId())) { holder.videoGoodIcon.setImageResource(R.drawable.icon_z); } else { holder.videoGoodIcon.setImageResource(R.drawable.icon_z_d); } loadBitmap(videoListBeanList.get(position).getVideoImage(), holder.videoListIcon); holder.item_background.getBackground().setAlpha(50); holder.videoListTitle.setText(videoListBeanList.get(position).getVideoTitle()); holder.videoPlayTimes.setText(videoListBeanList.get(position).getVideoPlayTimes()); holder.videoCollectTimes.setText(videoListBeanList.get(position).getVideoCollectTimes()); holder.videoGoodTimes.setText(videoListBeanList.get(position).getVideoGoodTimes()); laughSQLiteOpenHelper.close(); return view; } class collectClick implements View.OnClickListener { private int position; collectClick(int position) { this.position = position; } @Override public void onClick(View v) { Thread loadThread = new Thread(new LoadThread(videoListBeanList.get(position).getVideoId(), "collect")); loadThread.start(); int collectId = v.getId(); if (collectId == holder.videoCollectIcon.getId()) { if (new CollectTableCourse(laughSQLiteOpenHelper.getReadableDatabase()).searchCollect(videoListBeanList.get(position).getVideoId())) { collectOperate = new CollectOperate(laughSQLiteOpenHelper.getReadableDatabase()); collectOperate.insert(videoListBeanList.get(position).getVideoId(), videoListBeanList.get(position).getVideoImage(), videoListBeanList.get(position).getVideoTitle(), videoListBeanList.get(position).getVideoUrl()); holder.videoCollectIcon.setImageResource(R.drawable.icon_shouc_d); } else { collectOperate = new CollectOperate(laughSQLiteOpenHelper.getReadableDatabase()); collectOperate.delete(videoListBeanList.get(position).getVideoId()); holder.videoCollectIcon.setImageResource(R.drawable.icon_shouc); } notifyDataSetChanged(); laughSQLiteOpenHelper.close(); } } } class goodClick implements View.OnClickListener { private int position; goodClick(int position) { this.position = position; } @Override public void onClick(View v) { Thread loadThread = new Thread(new LoadThread(videoListBeanList.get(position).getVideoId(), "praise")); loadThread.start(); int playId = v.getId(); if (playId == holder.videoGoodIcon.getId()) { if (new GoodTableCourse(laughSQLiteOpenHelper.getReadableDatabase()).searchGood(videoListBeanList.get(position).getVideoId())) { goodOperate = new GoodOperate(laughSQLiteOpenHelper.getReadableDatabase()); goodOperate.insert(videoListBeanList.get(position).getVideoId()); holder.videoGoodIcon.setImageResource(R.drawable.icon_z_d); } else { goodOperate = new GoodOperate(laughSQLiteOpenHelper.getReadableDatabase()); goodOperate.delete(videoListBeanList.get(position).getVideoId()); holder.videoGoodIcon.setImageResource(R.drawable.icon_z); } notifyDataSetChanged(); laughSQLiteOpenHelper.close(); } } } private void loadBitmap(String urlStr, ImageView image) { ListViewImageTaskUtil asyncLoader = new ListViewImageTaskUtil(image, mLruCache);// 一个异步图片加载对象 Bitmap bitmap = asyncLoader.getBitmapFromMemoryCache(urlStr);// 首先从内存缓存中获取图片 if (bitmap != null) { image.setImageBitmap(bitmap);// 如果缓存中存在这张图片则直接设置给ImageView } else { image.setImageResource(R.drawable.wait);// 否则先设置成默认的图片 asyncLoader.execute(urlStr);// 然后执行异步任务AsycnTask 去网上加载图片 } } class LoadThread implements Runnable { private String id; private String type; LoadThread(String id, String type) { this.id = id; this.type = type; } @Override public void run() { loadData(id, type); } } private void loadData(String videoId, String buttonType) { Map<String, String> map = new LinkedHashMap<>(); map.put("videoid", videoId); map.put("type", buttonType); try { String backMsg = PostUtil.postData(BaseUrl + PostVideoInfo, map); L.d("运行到此,点赞,收藏加1"); } catch (IOException e) { e.printStackTrace(); } } class ViewHolder { LinearLayout item_background; ImageView videoListIcon; TextView videoListTitle; TextView videoPlayTimes; TextView videoCollectTimes; TextView videoGoodTimes; ImageView videoPlayIcon; ImageView videoCollectIcon; ImageView videoGoodIcon; }}
0 0
- 关于datebase,cursor的一些异常 android.database.CursorWindowAllocationException: Cursor window allocation of
- android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open
- android开发数据库Cursor 错误android.database.CursorWindowAllocationException
- Cursor window allocation of 2048 kb failed
- 关于android的SQLiteDatabase和Cursor的一些疑问
- 【Cursor】Android 中关于 【Cursor】 类的介绍
- Database----Cursor
- 关于 Android cursor用法
- 关于 android中的Cursor
- android关于cursor【转载】
- Android中Cursor 的一些方法
- cursor的一些用法
- cursor的一些总结
- Android 中关于Cursor类的介绍
- Android 中关于 【Cursor】 类的介绍
- Android 中关于 【Cursor】 类的介绍
- Android 中关于 【Cursor】 类的介绍
- Android 中关于 【Cursor】 类的介绍
- pat 1002. A+B for Polynomials
- 三角形的判断
- HDU1012 - u Calculate e (水题)
- 三目运算符“?:”省略中间操作数
- LeetCode之Find Minimum in Rotated Sorted Array
- 关于datebase,cursor的一些异常 android.database.CursorWindowAllocationException: Cursor window allocation of
- 工厂模式
- JVM(一):体系结构 && 内存模型
- AOP和IoC的实现原理
- Android 微信支付
- 开源框架Android Asynchronous Http Client
- 开源搜索引擎评估:lucene sphinx elasticsearch
- HDU1013 - Digital Roots (模拟)
- 第八章 假设检验