shubham kumbhar
shubham kumbhar

Reputation: 67

How to pass GET parameters to Retrofit request

I am creating an app with SoundCloud api and trying to append the string value which is entered by user but it showing me null in interface how can I append that in url?

MainActivity.java

  b.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View p1)
            {
                // TODO: Implement this method
                search = et.getText().toString();
                Log.d("search",search);
                Intent i = new Intent(MainActivity.this, SoundCloud.class);
                i.putExtra("mysearch", search);
                startActivity(i);

                Log.d("CustomUrl",SCService.CustomUrl);
                Toast.makeText(MainActivity.this,""+SCService.CustomUrl,Toast.LENGTH_SHORT).show();


                Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(Config.API_URL)
                    .addConverterFactory(GsonConverterFactory.create()).build();

                SCService Scservice = retrofit.create(SCService.class);
                Call<Track> call = Scservice.getTrack(search);
                call.enqueue(new Callback<Track>(){

                        @Override
                        public void onResponse(Call<Track> call, Response<Track> response)
                        {
                            // TODO: Implement this method
                            if (response.isSuccessful())
                            {
                                Track track = response.body();
                                streamUrl = track.getStreamUrl();
                                trackname = track.getTitle();
                                Log.e("track", track.getTitle());
                                Toast.makeText(MainActivity.this, trackname, Toast.LENGTH_SHORT).show();
                                Toast.makeText(MainActivity.this, "url" + streamUrl, Toast.LENGTH_SHORT).show();
                                //addToList(trackname);
                            }
                        }

                        @Override
                        public void onFailure(Call<Track> p1, Throwable p2)
                        {
                            // TODO: Implement this method
                            Toast.makeText(MainActivity.this,"error"+p2.getMessage(),Toast.LENGTH_SHORT).show();
                            //showMessage("Network Error: " +  p2.getMessage());
                            Log.d("error", p2.getMessage());
                        }
                    });

            }
        });

ScService.java

public interface SCService
{
    public String CustomUrl = Config.API_URL+"/resolve.json?url="+SoundCloud.SCURL+"&client_id="+Config.CLIENT_ID;
@GET("/resolve.json?url={SCURL}"+"&client_id="+Config.CLIENT_ID)
Call<Track> getTrack(@Path("SCURL")String SCURL);
}       

Searched string is in my SoundCloud.java class

    SCURL = receivedmsg.getString("mysearch");
    Log.d("intentdata",SCURL);

    tv.setText("Search Results for " + SCURL);  

I want append that SCURL String in GET parameter but it showing me null value for SCURL, how could i achieve this?

Update: I have changed my code as above but got this error

enter code here
  03-15 13:22:14.866 6149 6149 D     search com.sk.scdoenloader                   /https://m.soundcloud.com/dharmaworldwide/houseofcards-mixmaster-05b
  03-15 13:22:14.967 6149 6149 D     CustomUrl com.sk.scdoenloader                https://api.soundcloud.com/resolve.json?url=null&client_id=iZIs9mchVcX5lhVRyQGGAYlNPVldzAoX
  03-15 13:22:15.299 6149 6149 E     AndroidRuntime com.sk.scdoenloader                   FATAL EXCEPTION: main
  03-15 13:22:15.299 6149 6149 E     AndroidRuntime com.sk.scdoenloader           Process: com.sk.scdoenloader, PID: 6149
  03-15 13:22:15.299 6149 6149 E     AndroidRuntime com.sk.scdoenloader           java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #1)
  03-15 13:22:15.299 6149 6149 E     AndroidRuntime com.sk.scdoenloader           for method SCService.getTrack
  03-15 13:22:15.299 6149 6149 E     AndroidRuntime com.sk.scdoenloader           at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:720)
  03-15 13:22:15.299 6149 6149 E     AndroidRuntime com.sk.scdoenloader           at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:711)
  03-15 13:22:15.299 6149 6149 E     AndroidRuntime com.sk.scdoenloader           at retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod.java:729)
  03-15 13:22:15.299 6149 6149 E     AndroidRuntime com.sk.scdoenloader                     

Upvotes: 3

Views: 16874

Answers (4)

Iman Marashi
Iman Marashi

Reputation: 5753

You have to use @Query here

 @GET("Account/RegisterMobileNumber")
 Call<JsonObject> sendSMSToMobileNumber(@Query("mobileNumber") String mobileNumber);

Upvotes: 1

ericn
ericn

Reputation: 13103

What you want here are GET parameters, not path, so use @Query("scurl") String scurl

More details are here

By the way, it's kinda strange (at least in Java) to use all caps for your variable name, scurl is more appropriate than SCURL here

Upvotes: 1

Santanu Sur
Santanu Sur

Reputation: 11477

You can use DYNAMIC URL with retrofit !! (With @Get )

public interface SCService{  
   @GET
   public Call<Track> getTrack(@Url String url);
}

Then you can call with your Custom string url

 service.getTrack("/resolve.json?url="+SoundCloud.SCURL+"&client_id="+ Config.CLIENT_ID + SCURL)

Upvotes: 7

Ramkumar.M
Ramkumar.M

Reputation: 691

You have to use @Path here

@GET("/resolve.json?url={url}&client_id={clientId}")
Call<Track> getTrack(@Path("url") String url,@Path("clientId") String clientId);

Upvotes: 13

Related Questions