2017-02-05 5 views
0

Я начинаю с этого. Я пытаюсь получить ответ от запроса POST в JSONarray. И когда я пытаюсь получить ответ на массив, я могу получить объект JSON. это мой POJOОтвет на запрос ответа POST в массиве JSON

User.Java

public class User { 
    @SerializedName("username") 
    @Expose 
    private String user; 

    @SerializedName("pass") 
    @Expose 
    private String pass; 

    @SerializedName("status") 
    @Expose 
    private String status; 

    @SerializedName("message") 
    @Expose 
    private String message; 

    @SerializedName("data") 
    @Expose 
    private ArrayList<Datum> data; 

    public User(String user, String pass, String mesaage){ 
     this.user = user; 
     this.pass = pass; 
     this.message = message; 
    } 

    public String getStatus() { 
     return status; 
    } 
    public ArrayList<Datum> getData() { 
     return data; 
    } 

    public void setData(ArrayList<Datum> data) { 
     this.data = data; 
    } 
    public String getMessage() { 
     return message; 
    } 
} 

Datum.Java:

public class Datum { 
    @SerializedName("id") 
    @Expose 
    private String id; 

    @SerializedName("username") 
    @Expose 
    private String username; 

    @SerializedName("mk_nama") 
    @Expose 
    private String mkNama; 

    public String getId() { 
     return id; 
    } 

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

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getMkNama() { 
     return mkNama; 
    } 

    public void setMkNama(String mkNama) { 
     this.mkNama = mkNama; 
    } 
} 

это мой интерфейс

public interface UserClient { 
@FormUrlEncoded 
@POST("login") 
Call<User> loginAccount (
          @Field("user") String username, 
          @Field("pass") String password 
);} 

и это мой MainActivity

private void sendNetworkRequest(String username, String password) { 

    Retrofit.Builder builder = new Retrofit.Builder() 
      .baseUrl("https://prht.herokuapp.com/api/") 
      .addConverterFactory(GsonConverterFactory.create()); 
    Retrofit retrofit = builder.build(); 

    UserClient client = retrofit.create(UserClient.class); 
    Call<User> call = client.loginAccount(username,password); 
    call.enqueue(new Callback<User>() { 
     @Override 
     public void onResponse(Call<User> call, Response<User> response) { 
      Toast.makeText(LoginActivity.this, response.body().getData(),Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onFailure(Call<User> call, Throwable t) { 
      Toast.makeText(LoginActivity.this, "BAD ERROR" , Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

Кажется, я не могу добраться до объекта JSONarray в getData()

+1

опубликовать ваш ответ JSON – arjun

+0

ответ предположить, что это "данные": [ { "ID": "90", "имя пользователя": "10090", "mk_nama": «XXXXXXXXXX " } ] –

+0

проблема у вас только с arraylist. Я имею в виду, что вы получаете данные в других полях, таких как 'username',' pass', 'status' – arjun

ответ

0

Я думаю, что это возможно работает, но, вероятно, вам нужно изменить некоторые детали. поставить точку останова и отладить, чтобы увидеть, что происходит в переменных.

Data data = response.body().getData(); 
Datum datum = data.get(0); 
Toast.makeText(LoginActivity.this,datum.getUsername() +" , "+ datum.getMkNama(),Toast.LENGTH_SHORT).show(); 
+0

поле статуса и сообщения является строкой и работает нормально, но когда я пытаюсь подтолкнуть arraylist, я не могу получить JSONобъект в массиве –

+0

вы попробовали response.body() в тосте, чтобы посмотреть, что он будет делать показать? Я думаю, он должен дать вам объект пользователя, не так ли? –

+0

Да, он просто показывает getStatus(), getMessage и getData(), и когда я выбираю getData(), он не показывает объект внутри –