2017-05-07 15 views
0

私は、ユーザーが以下に示すイメージのようなマップを表すレイアウトに動的に追加できるビューオブジェクトを持っています。アンドロイドスタジオの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データベースに格納して後で取得します。

ありがとう

答えて

0

大きなオブジェクトにはgsonを使用しないでください。代わりに、あなたのオブジェクトはSerializableインターフェイスを実装する必要があります。ここでは(良いチュートリアル)を見て:http://www.javaworld.com/article/2076120/java-se/flatten-your-objects.html

また、あなたがSnappyDbを使用することができます。https://github.com/nhachicha/SnappyDB/blob/master/README.md

それは、大規模で複雑なオブジェクトのためのSQLiteよりも高速だとあなたはそれが、シリアライズすることなく、任意のPOJOのオブジェクトを格納することができます。

+0

ありがとう、私はそれを試してみようとあなたに知らせる –

+0

また、データベースに画像をキャッシュすることは、あなたが本当にそれを行うに十分な理由がない限り、良いアイデアではないことにも注意してください。あなたはむしろファイルシステムを使用して画像をキャッシュする必要があります – user1209216

+0

私はキャンバスに描画されたビットマップを含むビューオブジェクトを使用していますが、ビットマップ用に別のシステムが必要ですか? –

関連する問題