将一个参数传递给另一个参数-从Android访问REST方法

时间:2018-09-21 18:42:29

标签: java android json rest retrofit

在我的Android应用程序中,我使用Retrofit通过REST连接到Firebird服务器上的Delphi应用程序。 REST方法“ SelectSQL”具有两个参数:StringTJSONObject。 例如:

select name from employee where employee_id=:id

{"id":10001}

这是我声明方法的接口的一部分:我使用了字符串和JSONObject。

 @POST("datasnap/rest/TstBaseMethods/SelectSQL/{param,param2}")
Call<Logowanie> selectSQL(@Header("Authorization") String credentials, @Query("param") String param, @Query("param2") JSONObject param2 );

在我的MainActivity.java中,我使用:

 Gson gson = new GsonBuilder()
            .setLenient()
            .create();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    StreamREST gerritAPI = retrofit.create(StreamREST.class);

    String dane = Credentials.basic("admin","admin");
    JSONObject obj = new JSONObject();
    try {
        obj.put("NAGL",11101);
        String dd = obj.toString();
        Call<Logowanie> sql = gerritAPI.selectSQL(dane,"select n.datadok from nagl n where n.id_nagl=:NAGL",obj);
        sql.enqueue(new Callback<Logowanie>() {
            @Override
            public void onResponse(Call<Logowanie> call, Response<Logowanie> response) {
                if(response.isSuccessful()) {
                    Logowanie log = response.body();
                    String result = log.result[0];
                    intent.putExtra(EXTRA_MESSAGE,generujWynik(log));
                    startActivity(intent);
                } else {
                    System.out.println(response.toString());
                }
            }

            @Override
            public void onFailure(Call<Logowanie> call, Throwable t) {
                System.out.println(t.getMessage() );
            }
        });
    } catch (JSONException e) {
        e.printStackTrace();
    }

问题是翻新无法正确编码第二个参数。启动应用程序时,我收到有关错误的第二个参数的消息,URL如下所示:

http://192.168.94.155:9000/datasnap/rest/TstBaseMethods/SelectSQL/%7Bparam,param2%7D?param=select%20n.datadok%20from%20nagl%20n%20where%20n.id_nagl%3D:NAGL&param2= {%22NAGL%22:11101}

您会看到:“ param2 = {%22NAGL%22:11101}”,其中param2如下:

{"NAGL":11101} 

括号和“”未编码。我的错误在哪里?我承认这些也是我使用Android和REST以及Stackoverflow的第一步,但是我已经做过基础工作:我启动了基本的REST方法,并且该方法有效。现在对我来说是个问题。

如果我没有在代码中包含重要部分,请告诉我,我会做的。

我可以补充一点,它与Embarcadero的DataSnap REST有关。

1 个答案:

答案 0 :(得分:0)

问题解决了。原来,我必须使用@Body Retrofit批注,因为此参数应该放在请求的正文中。