Why is no request made on retrofit call?

时间:2017-08-04 12:11:05

标签: android python django-rest-framework retrofit multipartform-data

I want my android users to be able to upload a profile image to the django rest api. I use retrofit to handle the upload:

UserService

@Multipart
@POST("users/upload-profile-image/")
Call<ResponseBody> uploadProfileImage(@Part MultipartBody.Part image,
                                      @Part("name") RequestBody name);

UserRepository

RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("upload", file.getName(), reqFile);
RequestBody name = RequestBody.create(MediaType.parse("text/plain"), "upload");

Call<ResponseBody> req = userServiceApi.uploadProfileImage(body, name);
req.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(@NonNull Call<ResponseBody> call,
                           @NonNull Response<ResponseBody> response) {
        // Do Something
        if (response.isSuccessful()) {
            Log.d(TAG, "Successfully uploaded image");
        } else {
            eventBus.post(new FailUploadProfileImageEvent());
        }
    }

    @Override
    public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
        t.printStackTrace();
    }
});

To instantiate the userServiceAPI

userServiceApi = ServiceGenerator.createService(UserService.class, token);

ServiceGenerator

// Actual digits replaced with X
private static final String BASE_API_URL = "http://XXX.XXX.X.XXX:8000/";

private static OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();

private static Retrofit.Builder builder = new Retrofit.Builder()
        .baseUrl(BASE_API_URL)
        .addConverterFactory(GsonConverterFactory.create());

public static <S> S createService(Class<S> serviceClass, String token) {
    if (token != null)
        okHttpBuilder.authenticator(new TokenAuthenticator(token));

    OkHttpClient client = okHttpBuilder.build();
    builder.client(client);
    Retrofit retrofit = builder.build();

    return retrofit.create(serviceClass);
}

users/urls.py

url(r'^upload-profile-image/$', views.UserProfileUploadImageView.as_view(), name="upload_profile_image"),

When I run the android app, no request is made to the server, why?

0 个答案:

没有答案