0

I have some api that contains JSON with partner names.

I've set up interface and pojo model. I'll post below my code.

Here is my POJO model Partner:

public class Partner {   
    @SerializedName("name")
    @Expose
    private String name;   
    public String getName() {
        return name;
    }    
    public void setName(String name) {
        this.name = name;
    }
}

Now here is my interface:

public interface APIService {    
        @GET("Partner")
        Call<List<Partner>> getPartners();
}

And here is my APIHelper:

public class APIHelper {

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

    public static APIService apiService;

    public static APIService getApiService() {
        if (apiService == null) {
            Retrofit retrofit = new Retrofit.Builder().baseUrl(PARTNERS_URL)
                    .addConverterFactory(GsonConverterFactory.create()).build();
            apiService = retrofit.create(APIService.class);
        }
        return apiService;
    }
}

And this is Fragment which contains Button where onClick method needs to get data from web.

public class DownloadMain extends Fragment implements Callback<Partner> {    
    private static final String TAG = DownloadMain.class.getSimpleName();    
    private Button dloadPartners;
    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);
        dloadPartners.setOnClickListener(btnListener);    
        callPartners = APIHelper.getApiService().getPartners();    
        return view;
    }

    Button.OnClickListener btnListener = (new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            callPartners.clone().enqueue(DownloadMain.this);
        }
    });

    @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 {
            List<String> partners = (List<String>) response.body();
            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) {    
    }
}

This is all my code for getting Partners from web.

I'm getting this error on server side and can't resolve it:

No route matches [GET] "/partners.json/Partner"

QUESTION: Can someone look at this code and say what is wrong and why I'm not getting data from web and also how should I resolve this no route error?

RubyDigger19
  • 835
  • 13
  • 38

1 Answers1

1

change your get path like so

public interface APIService {    
    @GET("partners.json")
    Call<List<Partner>> getPartners();
}

and remove that path from your base url.

public class APIHelper {

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

public static APIService apiService;

public static APIService getApiService() {
    if (apiService == null) {
        Retrofit retrofit = new Retrofit.Builder().baseUrl(PARTNERS_URL)
                .addConverterFactory(GsonConverterFactory.create()).build();
        apiService = retrofit.create(APIService.class);
    }
    return apiService;
}
}
Danny Beaumont
  • 356
  • 1
  • 8