2016-11-28 109 views
-1

我正在实现一个使用Android的宁静的客户端。我有API URL,令牌等。我使用Retrofit 2库来实现这个应用程序,都是正确的。但JSON值无法正确显示。我尝试了几种方法来解决这个问题,但找不到任何正确的解决方案。

这是我的代码:

JSON字符串

{"deposits":[{"id":806638,"amount":100,"status":"Canceled","reason":null},{"id":814436,"amount":1,"status":"Approved","reason":null},{"id":814452,"amount":1,"status":"Approved","reason":null},{"id":814505,"amount":1,"status":"Approved","reason":null}]} 

主要活动

void getRetrofitArray() { 

    final String API_BASE_URL = "https://www.example.com/"; 
    final String credentials = "Bearer dfdfdfdlcdvksbdjsbdlvffdfddfdfdfjloiulfjuktj92p0JTFwJuFHlObIlWn8feQ_WA"; 
      OkHttpClient okHttpClient = new OkHttpClient.Builder() 
      .addInterceptor(new okhttp3.Interceptor() { 
       @Override 
       public Response intercept(okhttp3.Interceptor.Chain chain) throws IOException { 

        Request request = chain.request().newBuilder() 
          .addHeader("Authorization", credentials) 
          .addHeader("Accept", "application/json").build(); 

        return chain.proceed(request); 

       } 
      }).addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) 
      .readTimeout(60, TimeUnit.SECONDS) 
      .connectTimeout(60, TimeUnit.SECONDS) 
      .build(); 

    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(API_BASE_URL) 
      .client(okHttpClient) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 


    LoginApi service = retrofit.create(LoginApi.class); 



    Call <List <Users>>call = service.getDeposits(); 
    Log.d("onResponse", "There is an xlllllllllllllllllllllkkkkkkklll"); 
    call.enqueue(new Callback<List<Users>>(){ 
     @Override 
     public void onResponse(Call<List<Users>>call, retrofit2.Response<List<Users>>response) { 

      try { 

       // Users UserData = response.body(); 
       List <Users> UserData =response.body(); 

       //String jsonString= response.body().toString(); 
       // Type listType = new TypeToken<List<Users>>(){}.getType(); 

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

        text_marks_1.setText("StudentMarks : " +UserData.get(i).getDeposits()); 


        // else if (i == 2) { 
         //text_id_2.setText("StudentId : " + UserData.get(i).getName()); 
        // 
       } 
      } catch (Exception e) { 
       Log.d("onResponse", "There is an error"); 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onFailure(Call<List<Users>>call, Throwable t) { 
      Log.d("onResponse", "There is an error"); 
      t.printStackTrace(); 
     } 
    }); 

} 

用户类

public class Users { 
    @SerializedName("deposits") 
    @Expose 
    private List<Deposit> deposits = new ArrayList<Deposit>(); 

    /** 
    * 
    * @return 
    * The deposits 
    * 
    */ 
    public List<Deposit> getDeposits() { 
     return deposits; 
    } 

    /** 
    * 
    * @param deposits 
    * The deposits 
    */ 
    public void setDeposits(List<Deposit> deposits) { 
     this.deposits = deposits; 
    } 

} 

存款类

public class Deposit { 

    @SerializedName("id") 
    @Expose 
    private Integer id; 
    @SerializedName("amount") 

    @Expose 
    private Integer amount; 
    @SerializedName("status") 
    @Expose 
    private String status; 
    @SerializedName("reason") 
    @Expose 
    private Object reason; 

    /** 
    * 
    * @return 
    * The id 
    */ 
    public Integer getId() { 
     return id; 
    } 

    /** 
    * 
    * @param id 
    * The id 
    */ 
    public void setId(Integer id) { 
     this.id = id; 
    } 

    /** 
    * 
    * @return 
    * The amount 
    */ 
    public Integer getAmount() { 
     return amount; 
    } 

    /** 
    * 
    * @param amount 
    * The amount 
    */ 
    public void setAmount(Integer amount) { 
     this.amount = amount; 
    } 

    /** 
    * 
    * @return 
    * The status 
    */ 
    public String getStatus() { 
     return status; 
    } 

    /** 
    * 
    * @param status 
    * The status 
    */ 
    public void setStatus(String status) { 
     this.status = status; 
    } 

    /** 
    * 
    * @return 
    * The reason 
    */ 
    public Object getReason() { 
     return reason; 
    } 

    /** 
    * 
    * @param reason 
    * The reason 
    */ 
    public void setReason(Object reason) { 
     this.reason = reason; 
    } 

} 

接口类

public interface LoginApi { 

    //@GET("/media/webservice/JsonReturn.php HTTP/1.1") 
    // Call<List<User>> getUserDetails(); 


    @GET("api/deposits") 
    Call <List<Users>> getDeposits(); 
} 

编辑...... 新存款类

public class Deposit implements Serializable { 

@SerializedName("deposits") 
@Expose 
private List<Deposit> deposits ; 

public List<Deposit> getDeposits() { 
    return deposits; 
} 

public void setDeposits(List<Deposit> deposits) { 
    this.deposits = deposits; 
} 

@SerializedName("id") 
@Expose 
private Integer id; 
@SerializedName("amount") 
@Expose 
private Integer amount; 
@SerializedName("status") 
@Expose 
private String status; 
@SerializedName("reason") 
@Expose 
private Object reason; 

public Integer getId() { 
    return id; 
} 


public void setId(Integer id) { 
    this.id = id; 
} 


public Integer getAmount() { 
    return amount; 
} 


public void setAmount(Integer amount) { 
    this.amount = amount; 
} 


public String getStatus() { 
    return status; 
} 


public void setStatus(String status) { 
    this.status = status; 
} 

public Object getReason() { 
    return reason; 
} 


public void setReason(Object reason) { 
    this.reason = reason; 
}} 
+0

'getDeposits'是一个方法,一个陌生的名字,将返回'名单'或'User'。也许你应该重命名该类,以更明确你的意图 –

+0

你的意思是重命名用户类? – cpk

+0

这就是我的意思,是的。如果这是有道理的,我不知道。看起来像存款的对象,不一定是一个用户,每一个说。无论如何,如果你可以控制服务器代码,你可以将对象“扁平”为一个列表。没有必要使用'{“deposit”:'JSON部分,只需从'[{“id”:806638,“amount”:...' –

回答

2

我觉得你的API接口类应该是:

@GET("api/deposits") 
Call<User> getDeposits(); 

,并在你的活动:

Call<User> call = service.getDeposits(); 
call.enqueue(new Callback<User>(){ 
    @Override 
    public void onResponse(Call<User>call, retrofit2.Response<User>response) { 

      List<Deposit> = response.getDeposits(); 

      } 

    } 
+0

不,这是错误的方式,我直拨电话用户类 – cpk

+0

@ChmathKalubovila这看起来是正确的。 –

+0

没有家伙,这不适合我 – cpk

相关问题