I am trying to implement several buttons in a fragment, and each of these buttons should get some data from the web api.
I created a retroactive callback for one button. Now I have some problems creating another button to get data from another api.
here is my interface:
public interface APIService { @GET("/api/partners.json") Call<List<Partner>> getPartners(); @GET("/api/drivers.json") Call<List<Driver>> getDrivers(); @GET("/api/warehouses.json") Call<List<Warehouse>> getWarehuses(); }
This is my helper api class:
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; } }
this is my pojo driver model (all pojo models are almost the same)
public class Driver { @Expose private List<String> driver_name = new ArrayList<String>(); public List<String> getDriver_name() { return driver_name; } public void setDriver_name(List<String> driver_name) { this.driver_name = driver_name; } }
And this is my fragment where I have a callback for partners, and you need to implement one more button to get drivers and a third button to get some repositories.
public class DownloadMain extends Fragment implements Callback<Partner> { 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<String> partners = (ArrayList<String>) 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) { } }
Now itβs hard for me to implement a second button to get data from the api.
I would be grateful if anyone could help me execute the second button to get drivers from api ?!