如果有多个数据,我怎样才能更新Retrofit2
中的特定子项。
正如您在附件中看到的那样,我有两个数据/乘客资料。我想将第一个旅客资料的余额更新为 tagID:613421 。怎么可能?
public interface APIServicePassenger {
@GET("/passengers")
Call<List<Passenger>> getPassengers();
@PUT("/passengers")
Call<List<Passenger>> updatePassengerProfile(@Field("balance") int balance);
}
但我不知道如何使用 PUT请求
public class Config {
public static final String BASE_URL = "http://busartery.....";
public static Retrofit getClient() {
Retrofit retrofit = null;
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(Config.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
我不知道我做的是否正确。
if (!medtCustomerID.getText().toString().trim().isEmpty() &&
!medtCustomerName.getText().toString().trim().isEmpty()) {
balance += amountLoad;
final Call<List<Passenger>> passengerCallList = servicePassenger.getPassengers();
passengerCallList.enqueue(new Callback<List<Passenger>>() {
@Override
public void onResponse(Call<List<Passenger>> call, Response<List<Passenger>> response) {
if (response.isSuccessful()) {
List<Passenger> passengerList = response.body();
if (passengerList.size() != 0) {
for (int i = 0; i <passengerList.size(); i++) {
String name = passengerList.get(i).getName();
if (name.equals(medtCustomerName.getText().toString().trim())) {
//to update that specific data
Passenger passenger = new Passenger(balance);
Call<List<Passenger>> callPassList = servicePassenger.updatePassengerProfile(
passenger.getBalance());
callPassList.enqueue(new Callback<List<Passenger>>() {
@Override
public void onResponse(Call<List<Passenger>> call, Response<List<Passenger>> response) {
if (response.isSuccessful()) {
Toast.makeText(LoaderActivity.this, "Successfully loaded.\n New Load " +balance, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<List<Passenger>> call, Throwable t) {
Toast.makeText(LoaderActivity.this, "onFailure(update): " +t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
}
}
}
}
@Override
public void onFailure(Call<List<Passenger>> call, Throwable t) {
Toast.makeText(LoaderActivity.this, "onFailure(btnLoad) :"+t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
答案 0 :(得分:0)
它关于您的客户端代码,但是您的服务器代码。 REST允许您使用@PUT更新内容 您发布的代码不能仅更新服务器上的部分节点。 和界面:
@PUT("/passengers")
Call<List<Passenger>> updatePassengerProfile(@Field("balance") int balance);
不会更新它,因为它不会知道你要更新的列表中的哪一部分,你应该提供一个乘客ID
@PUT("/passengers")
Call<List<Passenger>> updatePassengerProfile(@Field("balance") int
balance,@Field("id") String id);
ps你可能会松开@Field注释。
此服务仅在服务器支持时才会起作用