2016-06-28 4 views
3

Я изучаю модификацию после видео с youtube , но прямо сейчас я застрял. Он показывает мне ошибку «retrofit expected begin_array, но был begin_object в строке 1 столбец 2 путь $» Я пытаюсь получить данные json с этого сайта. http://servicio-monkydevs.rhcloud.com/clientes/

Вот мой код

MainActivity.java

resultadoTextView = (TextView) findViewById(R.id.Resultado); 
    Retrofit restAdapter = new Retrofit.Builder() 
      .baseUrl("http://servicio-monkydevs.rhcloud.com") 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 

    ClienteService service = restAdapter.create(ClienteService.class); 
    Call<Cliente> call = service.getCliente(); 
    call.enqueue(new Callback<Cliente>() { 
     @Override 
     public void onResponse(Call<Cliente> call, Response<Cliente> response) { 
      if(response.isSuccessful()) { 
       resultadoTextView.setText(call.toString()); 
      }else{ 
       resultadoTextView.setText("algo paso"); 
      } 
     } 

     @Override 
     public void onFailure(Call<Cliente> call, Throwable t) { 
      resultadoTextView.setText(t.getMessage()); 
     } 
    }); 

ClientService.java

public interface ClienteService { 
    @GET("/clientes") 
    Call<Cliente> getCliente(); 
} 

Client.java

public class Cliente { 
private int id; 
private String name; 
private String username; 
private String email; 
private String phone; 
private String website; 
private String photo; 

public int getId() { 
    return id; 
} 

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

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getUsername() { 
    return username; 
} 

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

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public String getPhone() { 
    return phone; 
} 

public void setPhone(String phone) { 
    this.phone = phone; 
} 

public String getWebsite() { 
    return website; 
} 

public void setWebsite(String website) { 
    this.website = website; 
} 

public String getPhoto() { 
    return photo; 
} 

public void setPhoto(String photo) { 
    this.photo = photo; 
} 

@Override 
public String toString() { 
    return "Cliente{" + 
      "id=" + id + 
      ", name='" + name + '\'' + 
      ", username='" + username + '\'' + 
      ", email='" + email + '\'' + 
      ", phone='" + phone + '\'' + 
      ", website='" + website + '\'' + 
      ", photo='" + photo + '\'' + 
      '}'; 
}} 

Что я делаю неправильно?

UPDATE

Я сделал эти изменения

public class Cliente { 
@SerializedName("id") 
private int id; 
@SerializedName("name") 
private String name; 
@SerializedName("username") 
private String username; 
@SerializedName("email") 
private String email; 
@SerializedName("phone") 
private String phone; 
@SerializedName("website") 
private String website; 
@SerializedName("photo") 
private String photo; 
... 

И это в интерфейсе

public interface ClienteService { 
    @GET("/clientes") 
    Call<List<Cliente>> getCliente(); 
} 

И это в MainActivity, как вы говорите

Call<List<Cliente>> call = service.getCliente(); 
    call.enqueue(new Callback<List<Cliente>>() { 
     @Override 
     public void onResponse(Call<List<Cliente>> call, Response<List<Cliente>> response) { 
      if(response.isSuccessful()) { 
       resultadoTextView.setText(call.toString()); 
      }else{ 
       resultadoTextView.setText("algo paso"); 
      } 
     } 

     @Override 
     public void onFailure(Call<List<Cliente>> call, Throwable t) { 
      resultadoTextView.setText(t.getMessage()); 
     } 
    }); 

Но теперь он показывает мне эту ошибку: «[email protected]

Он показывает мне это в этой линии

... 
if(response.isSuccessful()) { 
      resultadoTextView.setText(call.toString()); <-- HERE 
     }else{ 
... 
+0

ошибка верно. вы можете проверить, есть ли у вас знания о синтаксисе json и синтаксисе объекта. Ваш результат json начинается с '[', который является синтаксисом массива. –

+0

Можете ли вы добавить ссылку на видеоролик, на который вы ссылаетесь? – bakoyaro

ответ

9

Как вы можете видеть Данный REST API URL возвращения массив объекта, то есть ArrayList, но в вашем обновленном api-сервисе возвращаемый тип - Only Cliente. Так изменить ClientService.java к ниже

public interface ClienteService { 
@GET("/clientes") 
Call<List<Cliente>> getCliente(); 
} 

И изменить метод Call.enque() к этой

Call<List<Cliente>> call = service.getCliente(); 
    call.enqueue(new Callback<Cliente>() { 
     @Override 
     public void onResponse(Call<List<Cliente> call, Response<List<Cliente>> response) { 
      if(response.isSuccessful()) { 
       // your code to get data from the list 
      }else{ 

      } 
     } 

     @Override 
     public void onFailure(Call<List<Cliente>> call, Throwable t) { 
      resultadoTextView.setText(t.getMessage()); 
     } 
    }); 
+0

Thaks для ответа. Я сделал изменения, но теперь он говорит «[email protected]4», что это значит? – eduarboy

+0

Спасибо.Внесите это изменение и замените «call.toString()» на «response.body(). ToString()» работает! – eduarboy

1
  • во-первых, вам нужно изменить Call<Client> к Call<List<Client>>, потому что список обратного ответа объект клиента.
  • во втором приготовит Class ClientреализуетSerializable для поддержки разборе

Я думаю, что сделали

+0

Thaks для ответа. Я сделал изменения, но теперь он говорит «[email protected]4», что это значит? – eduarboy

+0

Я думаю, вы можете использовать RxJava с доработкой, что является лучшей практикой здесь – ThanhTranIT

Смежные вопросы