本文介绍了如何将GET参数传递给Retrofit请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用SoundCloud api创建一个应用程序并尝试追加用户输入的字符串值,但它在界面中显示为null如何将其附加到url中?
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
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
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);
}
搜索字符串在我的SoundCloud.java类中
Searched string is in my SoundCloud.java class
SCURL = receivedmsg.getString("mysearch");
Log.d("intentdata",SCURL);
tv.setText("Search Results for " + SCURL);
我希望在GET参数中附加SCURL String,但它显示我为SCURL的null值,我怎么可能实现这个目标?
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
推荐答案
你必须使用 @Path
此处
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);
这篇关于如何将GET参数传递给Retrofit请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!