如何在 android 中使用改造来解析这个 web 服务?

Posted

技术标签:

【中文标题】如何在 android 中使用改造来解析这个 web 服务?【英文标题】:how to parse this web service using retrofit in android? 【发布时间】:2018-01-28 14:47:28 【问题描述】:

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

这里我想在 URL 中传递 ID(如上),在 Body 中传递 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);

我是这样传递的: 值= webservice/profile/id/4096

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

【问题讨论】:

查看答案 【参考方案1】:

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

你的方法应该是这样的。

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

希望对你有帮助:)

【讨论】:

谢谢您的回答,我需要 Body,因为这个概念就像当我不传递 body 时它会检索整个数据,当我传递 body 时它会更新数据 那么你不应该发送 json 对象。你应该在你的身体中使用模型类对象。 Retrofit 会将其转换为 json 如果它解决了您的问题,请将其标记为已接受的答案。它会帮助别人。【参考方案2】:

请试试这个方法

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

您应该按照 Bhuvanesh 的建议使用您的模型类传递 JSON

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);

【讨论】:

我可以检索数据但不能更新配置文件数据,这两个时间响应都像检索数据成功。但是当我通过 json 它应该成功更新数据

以上是关于如何在 android 中使用改造来解析这个 web 服务?的主要内容,如果未能解决你的问题,请参考以下文章

在android中使用改造的json解析错误

如何使用 Retrofit 解析 json

如何在 Android Studio 中使用改造来检索数据

ArrayList<String> 使用改造 android 解析成 recyclerview

如何通过改造解析 JSON 响应

改造解析JSON响应空值Android