2016-03-22 8 views
0

Ich habe ein Problem, BandClient-Objekt in JSON zu konvertieren (ich möchte Objekt für die spätere Verwendung im SHARED PREFS (ANDROID) speichern).Wie konvertiert man Objekte in GSON (JSON) auf die richtige Weise?

Ich habe versucht, es zu tun, indem Gson verwenden, aber während der Ausführung

String json = gson.toJson(bandClient); 

Ich bekomme immer folgende Ausnahme:

Prozess: xxr.com.mitracker, PID: 19040 java.lang.StackOverflowError bei com.google.gson.internal $ Gson $ Types.resolve ($ Gson $ Types.java: 380). bei com.google.gson.internal $ Gson $ Types.resolve ($ Gson $ Types.java.: 375) bei com.google.gso . N.internal $ Gson $ Types.resolve ($ Gson $ Types.java: 380) bei com.google.gson.internal $ Gson $ Types.resolve. ($ Gson $ Types.java: 375) bei com. . google.gson.internal $ Gson $ Types.resolve ($ Gson $ Types.java: 380)

Wie kann ich es in der richtigen Art und Weise zu lösen bitte?

Vielen Dank für jede Beratung

Methode Code:

private AdapterView.OnItemClickListener onListItemClickListener = new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
           long id) { 
      BandInfo[] pairedBands = 
        BandClientManager.getInstance().getPairedBands(); 

      Logger.d("Clicked on item " + position); 
      final BandClient bandClient = 
        BandClientManager.getInstance().create(context, pairedBands[position]); 
      //mBandList.get(position).getBandClient(); 

      MsBandHelperAssync asyncTask = new MsBandHelperAssync(new AsyncResponse() { 
       @Override 
       public void processFinish(Boolean output) { 
        try { 
         Logger.d("RETURNED " + output); 
         Gson gson = new Gson(); 
         Logger.d("PLAIN OBJECT" + bandClient); 
         gson.toJsonTree(bandClient); 
         Logger.d("PASSED"); 
         String json = gson.toJson(bandClient); 
         Logger.d("PASSED JSON" + json); 
         //Prefs.putString(Constants.Global.SHARED_PREFS_KEY_PAIRED_DEVICES, json); 
         Logger.d("Saved"); 
         //CommonHelper.redirectToActivity(context, mActivity, DashboardActivity.class); 
        } catch (Exception e) { 
         Logger.e(e.getMessage()); 
        } 

       } 
      }); 
      asyncTask.execute(bandClient); 
+0

Sie erhalten eine Stackoverflow, weil Sie in einer unendlichen rekursiven Schleife stecken. – chRyNaN

+0

Könnten Sie mir bitte sagen wo? – redrom

Antwort

1

A BandClient stellt eine Verbindung mit dem Bandservice von Micrsoft Gesundheit statt. Daher enthält es einen Verweis auf den Aktivitäts-, Dienst- oder Anwendungskontext, mit dem es erstellt wurde. Und es wird nicht funktionieren, wenn Sie es für die spätere Verwendung speichern.

Stattdessen möchten Sie wahrscheinlich die MAC-Adresse des BandInfo-Objekts speichern, das dem zu speichernden BandClient zugeordnet ist, und dann den BandClient neu erstellen, wenn Sie ihn verwenden möchten.

+0

Danke, Sie, ich wusste nicht, dass Mac-Adresse von Bandinfo-Objekt erhalten werden kann. – redrom