使用Retrofit 2将Android Post Json Data发送到服务器

时间:2016-05-02 05:25:51

标签: android json retrofit2

您好我有简单的Json在服务器上发布如下

{
    "Key":"KEY",
    "Token":"",
    "Data":
    {
         "Country": "India",
         "CountryCode":"IN",
         "MobileNumber":"+91111111111"
    }
}

如何将此数据发布到服务器请帮帮我 我创建了接口,我写了

 @POST("/user/register/")
Call<Login> Registration(@Body Login login, Callback<Login> callBack);

这样可以吗?我怎么称呼这个?

我已经像

一样使用它了
Login login = new Login();
        com.j2ml.casualtrack.pojo_Request.Data data = new com.j2ml.casualtrack.pojo_Request.Data();
        data.setMobileNumber("+911234567890");
        data.setCountry("India");
        data.setCountryCode("IN");
        login.setData(data);
        login.setToken("MY TOKEN KEY");
        login.setKey("");
        final ProgressDialog loading = ProgressDialog.show(this, "Registration in progress..", "Please wait...", false, false);
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Urls.URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        service = retrofit.create(RestAPI.class);
        service.Registration(login, new Callback<Login>() {
            @Override
            public void onResponse(Response<Login> response, Retrofit retrofit) {
                System.out.println("Response: " + response.isSuccess());
                loading.dismiss();
            }

            @Override
            public void onFailure(Throwable t) {
                System.out.println("ERROR ..."+t.getMessage());
            }
        });

但是,我收到此错误

 java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #2)

2 个答案:

答案 0 :(得分:0)

使用此代码..... 改装

 @POST("/user/register/")
Call<YourClass> createUser(@Body YourClass data);

而非YourClass将您的POJO class放入包含所有数据....

并调用retrofit将数据POST到服务器。

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://XXXXXXXXX.com")
.addConverterFactory(GsonConverterFactory.create())
.build();

YourClass you=new YourClass();
you.Key="new Key";//put all data like that in this class.

RegisterAPI api = retrofit.create(RegisterAPI.class);


Call<YourClass> call=api.createUser(you);
call.enqueue(new Callback<YourClass>() {}); 

随意询问是否有任何错误....

删除此行....

com.j2ml.casualtrack.pojo_Request.Data Data = new com.j2ml.casualtrack.pojo_Request.Data();

并尝试这个

   data.setMobileNumber("+911234567890");
    data.setCountry("India");
    data.setCountryCode("IN");

而不是上面使用这个......

    login.Data.setMobileNumber("+911234567890");
    login.Data.setCountry("India");
    login.Data.setCountryCode("IN");

享受编码.....

答案 1 :(得分:0)

如果你想发送一个对象(假设你的对象的格式类似于Test类。这里的数据是另一个对象的列表,其中包含属性[country,country code,mobilenumber])。

class Test { 
@SerializedName("key")
int key;
@SerializedName("token")
string token;
@SerializedName("data")
ArrayList<Data> data; }

如果您将此对象发布到服务器,它将按照您要求的方式获取所需的json。

{
"Key":"",
"Token":"",
"Data":
 {
     "Country": "",
     "CountryCode":"",
     "MobileNumber":""
 }
}

在这种情况下你可以使用@Body。 在服务中你可以找到类似的东西,

@POST(URL)
public Call<Test> postTest(@Body Test instanceOfTest);

希望这会对你有所帮助。