如何在android中使用retrofit解析这个Web服务?

时间:2017-08-20 11:29:45

标签: android web-services retrofit

http://www.superbinstruments.com/directory/index.php?r=webservice/profile/id/4096

这里我想在Body中传递ID(如上所述)和JsonObject(可以为null)。

这里的概念就像当我将null传递给json对象时,它将检索配置文件数据,或者如果我传递带有配置文件信息的json对象,那么它将更新配置文件数据。

我尝试过以下方法,但我可以检索数据,但我无法更新数据。 为了更新数据,我们可以传递与Body相同的JSON响应。

@POST("index.php")
Call<UserProfile> profileUser(@Query("r") String value, @Body String user);

@POST("index.php?")
Call<UserProfile> saveUser(@Query("r") String value, @Body JSONObject user);

我正在路过: value = webservice / profile / id / 4096

如果我以Json String作为个人资料更新信息传递,那么我得到了 “不需要无效的请求密码。”
要么  如果我将作为JsonObject传递为配置文件更新信息 然后我得到了 java.lang.OutOfMemoryError:尝试抛出OutOfMemoryError时抛出OutOfMemoryError;没有可用的堆栈跟踪

2 个答案:

答案 0 :(得分:0)

您发布的链接不需要任何正文发布。从代码中删除Body。要使用@Field,您必须将方法注释为@FormUrlEncoded

你的方法应该是这样的。

@FormUrlEncoded
@POST("index.php?r=webservice/profile/id/")
Call<UserProfile> saveUser(@Field("value") String value);

希望有所帮助:)

答案 1 :(得分:0)

请尝试这种方式

@POST("index.php")
Call<User> getInstruments(@Query("r") String webservice, @Body User user);

你应该使用你的模型类传递JSON Bh​​uvanesh 建议

JSONObject jObj = null;
    try {
        jObj = new JSONObject();
        jObj.put("firstname", "Kunjan Shah");
    } catch (JSONException ex) {
        ex.printStackTrace();
    }

User user = new User();
user.setData(jObj);

这是你的模特课

public class User {

    public String getSuccess() {
        return success;
    }

    public void setSuccess(String success) {
        this.success = success;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public JSONObject getData() {
        return data;
    }

    public void setData(JSONObject data) {
        this.data = data;
    }

    String success;
    String message;
    JSONObject data;
}

通过传递这两个参数来调用您的服务

  

调用update_user_profile =   yourapiinterfaceobject.getInstruments(“webservice / profile / id / 4096”,user);