Java 如何在android studio中的SQLite数据库中存储视图对象
我有一些视图对象,用户可以动态地将其添加到一个布局中,该布局表示如下图所示的地图 唯一的问题是用户需要能够保存数据,所以我想将视图对象存储在SQLite数据库中,然后保存到recyclerView中。当用户单击recyclerView上的项目时,它应该能够加载数据并填充上次保存时的布局 为了序列化视图对象,我尝试对对象进行GSON解析,但由于“StackOverflowerError:AsyncTask中的堆栈大小1036KB…”而无法工作Java 如何在android studio中的SQLite数据库中存储视图对象,java,android,sqlite,Java,Android,Sqlite,我有一些视图对象,用户可以动态地将其添加到一个布局中,该布局表示如下图所示的地图 唯一的问题是用户需要能够保存数据,所以我想将视图对象存储在SQLite数据库中,然后保存到recyclerView中。当用户单击recyclerView上的项目时,它应该能够加载数据并填充上次保存时的布局 为了序列化视图对象,我尝试对对象进行GSON解析,但由于“StackOverflowerError:AsyncTask中的堆栈大小1036KB…”而无法工作 //将视图对象转换为JSON字符串 类JSONCon
//将视图对象转换为JSON字符串
类JSONConversion扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(节点视图…参数){
Gson Gson=新的Gson();
字符串json=gson.toJson(参数[0]);
System.out.println(“DOINBACKGround”+json);
返回json;
}
}
//方法来测试转换是否有效
私有void launchGSON(){
NodeView node=newnodeview(“GAA”,23,this);//测试视图对象
新建JSONTransversion().execute(node);//加载单独的线程和
//将视图对象转换为JSON字符串,如果成功,则应在logcat中显示JSON字符串
}
//自定义视图对象类
公共类NodeView扩展视图{
私有字符串任务;
私人整数时间;
//要在画布上绘制的位图图像
私有瞬态位图mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.node_图标);
公共节点视图(字符串任务、整数时间、上下文mContext){
超级(mContext);
this.task=任务;
这个时间=时间;
}
@凌驾
公共布尔onTouchEvent(运动事件){
返回true;
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
//画布上绘制的位图
}
@凌驾
测量时的保护空隙(内部宽度测量等级、内部高度测量等级){
设定的测量尺寸(150150);
}
}
我开始得出这样的结论:GSON不会处理复杂的对象或太大的对象,那么我是否有什么地方做错了,或者是否有其他方法可以序列化对象状态以存储在SQLite数据库中,然后再检索
谢谢不要将gson用于大型对象。相反,您的对象应该实现可序列化接口。看这里(好教程): 或者,您可以使用SnappyDb:
对于大型和复杂的对象,它比sqlite更快,并且您可以存储任何pojo对象,而无需使其可序列化。还请注意,一般来说,在数据库中缓存图像不是一个好主意,除非您有很好的理由这样做。您应该使用文件系统来缓存图像如果我使用的是一个视图对象,其中包含在画布上绘制的位图,我需要一个单独的位图系统吗?
//Convert view object into JSON string
class JSONConversion extends AsyncTask<NodeView, String, String>{
@Override
protected String doInBackground(NodeView... params) {
Gson gson = new Gson();
String json = gson.toJson(params[0]);
System.out.println("DOINBACKGround " + json);
return json;
}
}
//method to test whether the conversion worked
private void launchGSON(){
NodeView node = new NodeView("GAA",23,this); //test view object
new JSONConversion().execute(node); // load separate thread and
//convert view object to JSON string, if successful should display the json string in the logcat
}
//Custom View object class
public class NodeView extends View {
private String task;
private int time;
//bitmap image to be drawn on canvas
private transient Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.node_icon);
public NodeView(String task, int time, Context mContext) {
super(mContext);
this.task = task;
this.time = time;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//bitmap drawn on canvas
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(150, 150);
}
}