2016-06-28 183 views
3

我正在學習翻新後,YouTube視頻 ,但現在我卡住了。它顯示了一個錯誤「翻新預計begin_array,但是在第1行第2列路徑$」begin_object我試圖從該網站獲取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]4」

這說明我這個在這一行

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

錯誤是真實的。你可以檢查你是否有關於json數組和對象語法的知識。你的json結果以'['開頭,這是一個數組語法。 –

+0

您可以將鏈接添加到您引用的you tube視頻嗎? – bakoyaro

回答

9

,你可以看到由於REST API返回的網址一個Object數組,即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和Retrofit,這是最佳實踐 – ThanhTranIT

相關問題