如何从改造api get调用返回对象

如何从改造api get调用返回对象,api,get,retrofit2,return-value,android-studio-2.0,Api,Get,Retrofit2,Return Value,Android Studio 2.0,我试图通过改造从api调用中获取对象列表,但我找不到这样做的方法:( 这是我构建的函数: private List<Business> businesses getBusinesses() { List<Business> businessesList = new ArrayList<>(); Call<List<Business>> call = jsonPlaceHolderApi.getBusinesses()

我试图通过改造从api调用中获取对象列表,但我找不到这样做的方法:( 这是我构建的函数:

 private List<Business> businesses getBusinesses()
{

    List<Business> businessesList = new ArrayList<>();
    Call<List<Business>> call = jsonPlaceHolderApi.getBusinesses();
    call.enqueue(new Callback<List<Business>>() {
        @Override
        public void onResponse(Call<List<Business>> call, Response<List<Business>> response) {
            if(!response.isSuccessful())
            {
                textViewResult.setText("Code: " + response.code());
                return;
            }
            List<Business> businesses = response.body();

            for(Business business : businesses)
            {
                String content = "";
                content += "ID: " + business.getId() + "\n";
                content += "Name: " + business.getName() + "\n";
                content += "On promotion: " + business.isOnPromotion() + "\n\n";

                textViewResult.append(content);
            }
            businessesList = businesses;
        }

        @Override
        public void onFailure(Call<List<Business>> call, Throwable t) {
            call.cancel();
            textViewResult.setText(t.getMessage());
        }
    });
}
private List business getbusiness()
{
List businessList=新建ArrayList();
Call Call=jsonPlaceHolderApi.getBusinesss();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
如果(!response.issusccessful())
{
textViewResult.setText(“代码:+response.Code());
返回;
}
List business=response.body();
用于(业务:业务)
{
字符串内容=”;
content+=“ID:”+business.getId()+“\n”;
内容+=“名称:”+business.getName()+“\n”;
促销时的内容+=“+business.isOnPromotion()+”\n\n”;
textViewResult.append(内容);
}
业务列表=业务;
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
call.cancel();
textViewResult.setText(t.getMessage());
}
});
}
我正试图得到企业的回应并将其退回。 有人能帮我吗?
感到沮丧:(

您执行改装调用的方式是异步的-使用
call.enqueue
。这种方法没有错。事实上,这可能是最好的选择,因为网络调用可能需要一段时间,您不想不必要地阻塞

不幸的是,这意味着您无法从函数返回结果。在大多数情况下,如果您返回了结果,则调用可能会在返回后完成,从而使您的返回无效

有几种方法可以解决此问题,最简单的方法是使用回调。例如:

interface OnBusinessListReceivedCallback {
     void onBusinessListReceived(List<Business> list);
}

private void businesses getBusinesses(OnBusinessListReceivedCallback callback){
  Call<List<Business>> call = jsonPlaceHolderApi.getBusinesses();
  call.enqueue(new Callback<List<Business>>() {
    @Override
    public void onResponse(Call<List<Business>> call, Response<List<Business>> response) {
        if(!response.isSuccessful()){
            textViewResult.setText("Code: " + response.code());
            return;
        }

        callback.onBusinessListReceived(response.body());
    }

    @Override
    public void onFailure(Call<List<Business>> call, Throwable t) {
        call.cancel();
        textViewResult.setText(t.getMessage());
    }
  });
}
BusinessListReceivedCallback上的接口{ 收到无效onBusinessListReceived(列表); } 私有无效业务GetBusinesss(OnBusinessListReceivedCallback回调){ Call Call=jsonPlaceHolderApi.getBusinesss(); call.enqueue(新回调(){ @凌驾 公共void onResponse(调用、响应){ 如果(!response.issusccessful()){ textViewResult.setText(“代码:+response.Code()); 返回; } onBusinessListReceived(response.body()); } @凌驾 失败时公共无效(调用调用,可丢弃的t){ call.cancel(); textViewResult.setText(t.getMessage()); } }); } 你可以这样称呼它:

getBusinesses(new OnBusinessListReceivedCallback() {
     public void onBusinessListReceived(List<Business> list){
        // list holds your data
     }
});
getBusinesss(新的OnBusinessListReceivedCallback(){
已接收到公共无效onBusinessListReceived(列表){
//列表保存您的数据
}
});