2017-08-05 45 views
1

在MVP结构中构建我的应用程序时,我遇到了一个问题,当我使用Retrofit调用Web服务以成功响应时 我将整个数据传入json字符串,这会激发我去做这个。gson中的java.lang.StackOverflowError

我的日志猫:

FATAL EXCEPTION: main java.lang.StackOverflowError 
    at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:147) 
    at java.lang.StringBuffer.append(StringBuffer.java:219) 
    at java.io.StringWriter.write(StringWriter.java:147) 
    at java.io.StringWriter.append(StringWriter.java:199) 
    at java.io.StringWriter.append(StringWriter.java:30) 
    at com.google.gson.stream.JsonWriter.beforeValue(JsonWriter.java:651) 
    at com.google.gson.stream.JsonWriter.open(JsonWriter.java:325) 
    at com.google.gson.stream.JsonWriter.beginObject(JsonWriter.java:308) 
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:205) 
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:145) 
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:125) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:243) 
    at com.google.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:107) 
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69) 
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:208) 
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:145) 
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:125) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:243) 
    at com.google.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:107) 
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69) 

这是我改造API调用:

//API Call for Pitch 
public void pitch() { 
    services 
     .getAPI() 
     .pitchList() 
     .enqueue(new Callback<PitchList_Res>() { 
      @Override 
      public void onResponse(Call<PitchList_Res> call, Response<PitchList_Res> response) { 
       if (!response.body().getdATA().isEmpty()) { 
        Gson gson1=new Gson(); 
        String json = gson1.toJson(response); 
        mListener.pitch(json); 
       } 
      } 

      @Override 
      public void onFailure(Call<PitchList_Res> call, Throwable t) { 
       call.cancel(); 
       Toast.makeText(context, R.string.error, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
} 

这里是主要活动在那里我得到了响应:

//Response of Pitch 
@Override 
public void pitch(String response_pitch) { 

    editor.putString(Preference_Data.PITCH_RESPONSE, response_pitch); 
    editor.commit(); 
    PitchList_Res pitchList_res = gson.fromJson(response_pitch, PitchList_Res.class); 
    pitchlist.addAll(pitchList_res.getdATA()); 

    for (int i = 0; i < pitchlist.size(); i++) { 

     View pitchview = getLayoutInflater().inflate(
       R.layout.textviewlayout, null); 
     final TextView tvtitle = (TextView) pitchview 
       .findViewById(R.id.tv_title); 

     String id = pitchlist.get(i).getpITCHTYPEID().toString(); 
     tvtitle.setId(Integer.valueOf(id)); 

     tvtitle.setText(pitchlist.get(0).getpITCHSHORT().toString()); 
     tvtitle.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       if (stPitchSelectionID != -1) { 
        findViewById(stPitchSelectionID) 
          .setBackgroundResource(
            R.drawable.btn_bg); 
       } 
       if (stPitchSelectionID == v.getId()) { 
        stPitchSelectionID = -1; 
        tvtitle.setBackgroundResource(R.drawable.btn_bg); 
        pitchid = "0"; 

       } else { 
        stPitchSelectionID = v.getId(); 
        tvtitle.setBackgroundResource(R.drawable.btn_bg_select); 

        pitchid = String.valueOf(stPitchSelectionID) 
          .substring(1); 

       } 
      } 
     }); 
    } 
} 

而且来自Setdefaultvalue()我正在检查我的活动回复:

public void Setdefaultvalue() { 
    llpitchcontainer.removeAllViews(); 
    llbatresultcontainer.removeAllViews(); 
    llpitchresultcontainer.removeAllViews(); 
    llscoringcontainer.removeAllViews(); 
    etspeed.setText(65 + ""); 
    tvhh.setBackgroundResource(R.drawable.no_toggle); 

    String response_pitch=pref.getString(Preference_Data.PITCH_RESPONSE,""); 

    if (response_pitch.equalsIgnoreCase("")) { 
     mainScoutPresenter.pitch(); 
     Log.e("Pitch_if","Pitch_if"); 
    } else { 
      pitch(response_pitch); 
      Log.e("Pitch_else", "Pitch_else"); 
    } 
} 

这里是我的两个模型类:(PitchList_Res)

public class PitchList_Res implements Serializable { 


    @SerializedName("DATA") 
    @Expose 
    private List<PitchList_Data> dATA = null; 

    public List<PitchList_Data> getdATA() { 
     return dATA; 
    } 

    public void setdATA(List<PitchList_Data> dATA) { 
     this.dATA = dATA; 
    } 
} 

PitchList_Data.java

public class PitchList_Data implements Serializable { 

    @SerializedName("PITCHTYPEID") 
    @Expose 
    private Integer pITCHTYPEID; 
    @SerializedName("PITCHFULL") 
    @Expose 
    private String pITCHFULL; 
    @SerializedName("PITCHSHORT") 
    @Expose 
    private String pITCHSHORT; 

    public Integer getpITCHTYPEID() { 
     return pITCHTYPEID; 
    } 

    public void setpITCHTYPEID(Integer pITCHTYPEID) { 
     this.pITCHTYPEID = pITCHTYPEID; 
    } 

    public String getpITCHFULL() { 
     return pITCHFULL; 
    } 

    public void setpITCHFULL(String pITCHFULL) { 
     this.pITCHFULL = pITCHFULL; 
    } 

    public String getpITCHSHORT() { 
     return pITCHSHORT; 
    } 

    public void setpITCHSHORT(String pITCHSHORT) { 
     this.pITCHSHORT = pITCHSHORT; 
    } 
} 
+0

在这行你正在崩溃或异常喜欢给我的代码块来分析。 –

+0

当我调试我的APP我收到崩溃在我的改造呼叫。 Gson gson1 = new Gson(); String json = gson1.toJson(response); –

回答

0

我得到了同样的问题&发现错误是由于 类型为Object的类中的变量。

我在解析一个java类对象,它包含内部对象,其中一些对象包含Object类型的变量。由于哪个Gson库无法解析这些数据。

我已经删除了变量和问题得到解决的对象类型声明。

我觉得GSON库无法解析Java对象的JSON如果 java对象包含一些变量,泛型类型(如在我的情况下,对象 型)。

public class HatchRetailer { 
    private int id; 
    private String name; 
    private String purchaseLink; 
    private String purchaseLinkDirect; 
    private String logo; 
    private String currency; 
    private double price; 
    private String stockInfo; 
    private int stockCount; 
    private String sourceDate; 
    private String businessId; 

// As per my understanding Gson library is not able to parse variable of type Object 
// private Object marketFocus; 
// private Object group; 

// Setters & Getters 
} 
相关问题