当前位置: 首页 > 知识库问答 >
问题:

如何将GET参数传递给Retrofit请求

罗淮晨
2023-03-14

我正在使用SoundCloud api创建一个应用程序,并尝试附加用户输入的字符串值,但它在界面中显示为null,我如何在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);
}       

搜索的字符串在我的SoundCloud.java类

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

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

我想在GET参数中附加那个SCURL字符串,但它显示了SCURL的null值,我如何实现这一点?

更新:我如上所述更改了代码,但出现了此错误

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                     

共有3个答案

王棋
2023-03-14

这里需要的是GET参数,而不是path,所以请使用Query(“scurl”)字符串scurl

更多细节在这里

顺便说一句,在变量名中使用所有大写字母有点奇怪(至少在Java中是这样),scurl比这里的scurl更合适

王彭薄
2023-03-14

您可以将动态URL用于改装!!(使用Get)

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

然后您可以使用自定义字符串url调用

 service.getTrack("/resolve.json?url="+SoundCloud.SCURL+"&client_id="+ Config.CLIENT_ID + SCURL)
黄涵畅
2023-03-14

您必须在此处使用路径

@GET("/resolve.json?url={url}&client_id={clientId}")
Call<Track> getTrack(@Path("url") String url,@Path("clientId") String clientId);
 类似资料:
  • 问题内容: 我被困在这个我无法完成的非常基本的表单中,我想用文本输入和两个选择控件构建一个搜索表单,并带有一个接受3个参数的路由,这个问题是当我提交形式,它用问号而不是Laravel方式映射参数, 标记 路线 当我提交表格时,将我重定向到 在没有Javascript的情况下,如何使用Laravel方式将这些参数传递给我的路线!:D 问题答案: 最简单的方法就是接受传入的请求,然后在Controll

  • > 将params序列化为一个JSON字符串,并在API中将其分开。http://forums.asp.net/t/1807316.aspx/1 传递查询字符串中的参数。 向restful API传递多个查询参数的最佳方法是什么? 在路由中定义params:api/controller/date1/date2 它还把我引向了支持可变参数的问题。如果输入参数列表发生更改,那么必须为选择3重新定义路由

  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。

  • 我正在使用PyJWT库(导入jwt)库生成用于身份验证的JSON web令牌。 最初的设计让我们通过URL传入令牌,比如http://example.net?token=EYKDFKDFKDNDFK... 但是,使用此解决方案,似乎任何查看URL中的令牌的人都可以使用此令牌访问站点。

  • 问题内容: 我想将登录用户单击的sa 列表中的传递给twitter bootstrap 。我正在与 angularjs* 一起使用 grails ,其中数据是通过 angularjs 呈现的。 *** 组态 我的grails视图页面是 我的是 所以,我怎么能传递到? 问题答案: 我尝试如下。 我在 鼓励 按钮上打电话给angularjs控制器, 我设置的从angularjs控制器。 我提供了一个p

  • 问题内容: 这似乎是一个愚蠢的问题,但是我是这个话题的新手。我正在致力于关于节点js的承诺。我想将参数传递给Promise函数。但是我不知道。 而功能类似于 问题答案: 将Promise包裹在一个函数中,否则它将立即开始工作。另外,您可以将参数传递给函数: 然后,使用它: ES6: 用: