作者:手机用户2502931993 | 来源:互联网 | 2023-06-01 14:36
原来测试的时候没有报错,现在出现好多蓝色提示,并且有时候程序会崩溃,我出现过以下几个错误
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 videoListBeanList;private LaughSQLiteOpenHelper laughSQLiteOpenHelper;private RecordOperate recordOperate;private CollectOperate collectOperate;private GoodOperate goodOperate;//用来记录播放状态的图标显示&#xff0c;测试private ViewHolder holder;// 获取当前应用程序所分配的最大内存private final int maxMemory &#61; (int) Runtime.getRuntime().maxMemory();// 只用五分之一用来做图片缓存private final int cacheSize &#61; maxMemory / 5;private LruCache mLruCache &#61; new LruCache(cacheSize) {// 重写sizeof&#xff08;&#xff09;方法&#64;Overrideprotected int sizeOf(String key, Bitmap bitmap) {// TODO Auto-generated method stub// 这里用多少kb来计算return bitmap.getRowBytes() * bitmap.getHeight() / 1024;}};public VideoListAdapter(Context context, List videoListBeanList) {this.context &#61; context;this.videoListBeanList &#61; videoListBeanList;}public void update() {notifyDataSetChanged();}&#64;Overridepublic int getCount() {return videoListBeanList.size();}&#64;Overridepublic Object getItem(int position) {return videoListBeanList.get(position);}&#64;Overridepublic long getItemId(int position) {return position;}&#64;Overridepublic View getView(final int position, View convertView, final ViewGroup parent) {View view &#61; convertView;if (view &#61;&#61; null) {view &#61; LayoutInflater.from(context).inflate(R.layout.item_activity_video_list, null);holder &#61; new ViewHolder();view.setTag(holder);holder.item_background&#61;(LinearLayout)view.findViewById(R.id.item_background);holder.videoListIcon &#61; (ImageView) view.findViewById(R.id.videolist_icon);holder.videoListTitle &#61; (TextView) view.findViewById(R.id.videolist_title);holder.videoPlayTimes &#61; (TextView) view.findViewById(R.id.videolist_play_times);holder.videoCollectTimes &#61; (TextView) view.findViewById(R.id.videolist_collect_times);holder.videoGoodTimes &#61; (TextView) view.findViewById(R.id.videolist_good_times);holder.videoPlayIcon &#61; (ImageView) view.findViewById(R.id.videolist_play_icon);holder.videoCollectIcon &#61; (ImageView) view.findViewById(R.id.videolist_collect_icon);holder.videoGoodIcon &#61; (ImageView) view.findViewById(R.id.videolist_good_icon);} else {holder &#61; (ViewHolder) convertView.getTag();}laughSQLiteOpenHelper &#61; 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 &#61; position;}&#64;Overridepublic void onClick(View v) {Thread loadThread &#61; new Thread(new LoadThread(videoListBeanList.get(position).getVideoId(), "collect"));loadThread.start();int collectId &#61; v.getId();if (collectId &#61;&#61; holder.videoCollectIcon.getId()) {if (new CollectTableCourse(laughSQLiteOpenHelper.getReadableDatabase()).searchCollect(videoListBeanList.get(position).getVideoId())) {collectOperate &#61; 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 &#61; 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 &#61; position;}&#64;Overridepublic void onClick(View v) {Thread loadThread &#61; new Thread(new LoadThread(videoListBeanList.get(position).getVideoId(), "praise"));loadThread.start();int playId &#61; v.getId();if (playId &#61;&#61; holder.videoGoodIcon.getId()) {if (new GoodTableCourse(laughSQLiteOpenHelper.getReadableDatabase()).searchGood(videoListBeanList.get(position).getVideoId())) {goodOperate &#61; new GoodOperate(laughSQLiteOpenHelper.getReadableDatabase());goodOperate.insert(videoListBeanList.get(position).getVideoId());holder.videoGoodIcon.setImageResource(R.drawable.icon_z_d);} else {goodOperate &#61; 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 &#61; new ListViewImageTaskUtil(image, mLruCache);// 一个异步图片加载对象Bitmap bitmap &#61; asyncLoader.getBitmapFromMemoryCache(urlStr);// 首先从内存缓存中获取图片if (bitmap !&#61; 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 &#61; id;this.type &#61; type;}&#64;Overridepublic void run() {loadData(id, type);}}private void loadData(String videoId, String buttonType) {Map map &#61; new LinkedHashMap<>();map.put("videoid", videoId);map.put("type", buttonType);try {String backMsg &#61; PostUtil.postData(BaseUrl &#43; PostVideoInfo, map);L.d("运行到此&#xff0c;点赞&#xff0c;收藏加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;}
}