Android 添加多个回调,如何在同一个片段中创建多个Retrofit回调 – android

我试图在片段多个按钮中实现,每个按钮需要从web api获取一些数据.

我已经为一个按钮创建了改装回调.现在我在创建另一个按钮以从另一个api获取数据时遇到了一些麻烦.

这是我的界面:

@H_403_6@public interface APIService {

@GET("/api/partners.json")

Call> getPartners();

@GET("/api/drivers.json")

Call> getDrivers();

@GET("/api/warehouses.json")

Call> getWarehuses();

}

这是我的api助手类:

@H_403_6@public class APIHelper {

public static final String BASE_URL = "https://part-of-url.herokuapp.com/";

public static APIService apiService;

public static APIService getApiService() {

if (apiService == null) {

Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL)

.addConverterFactory(GsonConverterFactory.create()).build();

apiService = retrofit.create(APIService.class);

}

return apiService;

}

}

这是我的驱动程序pojo模型(所有pojo模型几乎相同)

@H_403_6@public class Driver {

@Expose

private List driver_name = new ArrayList();

public List getDriver_name() { return driver_name; }

public void setDriver_name(List driver_name) { this.driver_name = driver_name; }

}

这是我的片段,我得到了合作伙伴的回调,需要实现另一个按钮来获取驱动程序和第三个按钮来获取一些存储空间.

@H_403_6@public class DownloadMain extends Fragment implements Callback {

private static final String TAG = DownloadMain.class.getSimpleName();

private Button dloadPartners,takeDrivers,takeWarehouses,takeUsers,takeLogs;

private Call callPartners;

public DownloadMain() {}

public DownloadMain newInstance() { return new DownloadMain(); }

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

@Override

public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.download_main,container,false);

dloadPartners = (Button) view.findViewById(R.id.downloadPartners);

takeDrivers = (Button) view.findViewById(R.id.btnDrivers);

dloadPartners.setOnClickListener(btnListener);

takeDrivers.setOnClickListener(btnDrivers);

callPartners = APIHelper.getApiService().getPartners();

return view;

}

Button.OnClickListener btnListener = (new Button.OnClickListener() {

@Override

public void onClick(View v) {

callPartners.clone().enqueue(DownloadMain.this);

checkIfDataIsInTable();

}

});

@Override

public void onResponse(Call call,Response response) {

if(response.body() == null) {

try {

response.errorBody().string();

} catch (IOException e) {

e.printStackTrace();

}

Toast.makeText(getActivity(),"No Partners!",Toast.LENGTH_SHORT).show();

} else {

ArrayList partners = (ArrayList) response.body();

ActiveAndroid.beginTransaction();

try {

for (int i = 0; i < partners.size() ; i++) {

Partners partner = new Partners();

partner.name = String.valueOf(partners);

partner.save();

Log.d("partner_ ",String.valueOf(response.body()));

}

ActiveAndroid.setTransactionSuccessful();

} finally {

ActiveAndroid.endTransaction();

}

Log.d(TAG,"Number of partners received: " + partners.size());

Toast.makeText(getActivity(),"Partners downloaded!",Toast.LENGTH_SHORT).show();

}

}

@Override

public void onFailure(Call call,Throwable t) {

}

}

现在我无法实现第二个按钮来从api获取数据.

如果有人可以帮我实现第二个按钮来从api获取驱动程序,我将不胜感激?!

使用retrofit2,你可以使用call.enqueue内联onResponse和onFailure,它允许你在同一个活动中拥有多个调用类型,因为它们被封装在call.enqueue()中

@H_403_6@// the following can be in the same activity

Call call1 = client.callName1(params);

call1.enqueue(new Callback() {

@Override

public void onResponse(Call call,Response response) {

Log.d(TAG,"Call1 Succeeded");

int code = response.code();

if (code == 200) {

// your parsing of POJO1 here

} else {

Log.d(TAG,"Error Happened");

}

}

@Override

public void onFailure(Call call,Throwable t) {

Log.d(TAG,"Call1 Failed");

}

});

Call call2 = client.callName2(params);

call2.enqueue(new Callback() {

@Override

public void onResponse(Call call,Response response) {

Log.d(TAG,"Call2 Succeeded");

int code = response.code();

if (code == 200) {

// your parsing of POJO2 here

} else {

Log.d(TAG,"Error Happened");

}

}

@Override

public void onFailure(Call call,"Call2 Failed");

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值