Giter Site home page Giter Site logo

Comments (10)

JakeWharton avatar JakeWharton commented on May 22, 2024

Here's a test case showcasing that it can work:

@Test
public void simpleFormEncoded() {
class Example {
@FormUrlEncoded //
@POST("/foo") //
Call<ResponseBody> method(@Field("foo") String foo, @Field("ping") String ping) {
return null;
}
}
Request request = buildRequest(Example.class, "bar", "pong");
RequestBody body = request.body();
assertBody(body, "foo=bar&ping=pong");
assertThat(body.contentType().toString()).isEqualTo("application/x-www-form-urlencoded");
}

Please supply a failing test case if you think something is broken.

from retrofit.

calidion avatar calidion commented on May 22, 2024

I think this simple test may be not sufficient.
I have seem a lot of question on why field is not working.
no one can give a working answer.
I am now using okhttpclient instead.

from retrofit.

calidion avatar calidion commented on May 22, 2024

this is the code working with OkHttpClient:

        public String quota(String username , String password) {
        RequestBody formBody = new FormBody.Builder()
                .add("username", username)
                .add("password", password)
                .build();

        Request request = new Request.Builder()
                .url(BASE_URL + "user/quota")
                .post(formBody)
                .build();

        Call call = httpClient.newCall(request);
            try {
                Response response = call.execute();
                return response.body().string();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

from retrofit.

calidion avatar calidion commented on May 22, 2024

this is the code not working with retrofit2:



    public Quota quota;
    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

    public void start(String username, String password) {
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();

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

        APIService apiService = retrofit.create(APIService.class);

        Call<Quota> quotaCall = apiService.getQuota(username, password);
        quotaCall.enqueue(this);
    }

    @Override
    public void onResponse(Call<Quota> call, Response<Quota> response) {
        if (response.isSuccessful()) {
            quota = response.body();
        } else {
            System.out.println(response.errorBody());
        }
    }

    @Override
    public void onFailure(Call<Quota> call, Throwable t) {
        t.printStackTrace();
    }
public interface Quota {
    public String username = "";
    public int quota = 0;
    public int upload = 0;
    public int download = 0;
}
public interface APIService {
    @GET("servers")
    void getServers();

    @FormUrlEncoded
    @POST("user/quota")
    Call<Quota> getQuota(@Field("username") String username, @Field("password") String password);

}

from retrofit.

JakeWharton avatar JakeWharton commented on May 22, 2024

How is it not working?

from retrofit.

calidion avatar calidion commented on May 22, 2024

How is it not working?

I can't trace much deeper.
I only know that the parameters are passed into the requester.

from retrofit.

calidion avatar calidion commented on May 22, 2024

@JakeWharton

https://github.com/Free-Web-Movement/android-base-library

this is a repository can reproduce this bug.
Where OKHTTP works well and @field not .

from retrofit.

JakeWharton avatar JakeWharton commented on May 22, 2024

Retrofit's @FormUrlEncoded uses OkHttp's FormBody.Builder to build the body the same as your snippet does.

if (isFormEncoded) {
// Will be set to 'body' in 'build'.
formBuilder = new FormBody.Builder();

I need a self-contained test case to debug anything here, so I'm going to preemptively close. If you can come up with a failing test case I can take a look.

from retrofit.

calidion avatar calidion commented on May 22, 2024

this is the failing test case and you don't take a look.
And there is only one test!

from retrofit.

calidion avatar calidion commented on May 22, 2024

https://github.com/Free-Web-Movement/android-base-library
is the simplest example that showing how @field fails.
if you don't have the ability to debug, then you'd better resign or close source this project.

from retrofit.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.