私は、ユーザーが以下に示すイメージのようなマップを表すレイアウトに動的に追加できるビューオブジェクトを持っています。アンドロイドスタジオのSQLiteデータベースにビューオブジェクトを格納する方法
http://web.cecs.pdx.edu/~sheard/course/Cs163/Graphics/graph2.jpg
唯一の問題は、ユーザーがデータを保存できるようにする必要があるということですので、私はrecyclerViewに保存されますSQLiteデータベース内のビューのオブジェクトを格納するために、と思いました。ユーザーがrecyclerViewでアイテムをクリックすると、データをロードして最後に保存したときのレイアウトにデータを取り込めるようになります。
私はオブジェクトのGSON解析を試みましたしかし、 "StackOverFlowError:Stack size 1036KB as AsyncTask ..."のために仕事がありませんでした。
//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);
}
}
私はそうImは間違っているものがあるか、私はオブジェクトの状態をシリアル化することができます別の方法があり、GSONは、オブジェクトの複雑なオブジェクトまたは大きすぎでは動作しません結論に来て始めていますSQLiteデータベースに格納して後で取得します。
ありがとう
ありがとう、私はそれを試してみようとあなたに知らせる –
また、データベースに画像をキャッシュすることは、あなたが本当にそれを行うに十分な理由がない限り、良いアイデアではないことにも注意してください。あなたはむしろファイルシステムを使用して画像をキャッシュする必要があります – user1209216
私はキャンバスに描画されたビットマップを含むビューオブジェクトを使用していますが、ビットマップ用に別のシステムが必要ですか? –