(Trang bị thêm) Không thể định vị bộ chuyển đổi cho ứng dụng bị lỗi lớp


81

Vì vậy, Retrofit 2.0.0 đã được phát hành gần đây và không thực sự có bất kỳ ví dụ cập nhật nào về cách sử dụng nó, nhưng tôi đang cố gắng triển khai nó cho một lệnh gọi API cơ bản. Tôi nhận được một

java.lang.IllegalArgumentException: Unable to create converter for class` 

gây ra bởi

Caused by: java.lang.IllegalArgumentException: Could not locate converter for class orbyt.app.dataclass. Tried:
* retrofit.OkHttpBodyConverterFactory

Khi cố gắng thực hiện cuộc gọi api.


không biết Retrofit, tôi đoán có một chú thích có thể chỉ định bộ chuyển đổi ở đâu đó.
Jiang YD

@JiangYD không chắc ý của bạn
Quỹ đạo

bạn cần đăng thêm mã về lỗi này. Đăng cuộc gọi api của bạn.
heloisasim

Ví dụ trên square.github.io/retrofit đưa ra lỗi này. Hãy thử nếu bạn không tin người đặt câu hỏi hoặc nếu bạn muốn biết chi tiết. Họ không cố gắng làm bất cứ điều gì lạ mắt.
Andrew Koster

Câu trả lời:


134

Tôi đã phải đối mặt với cùng một vấn đề. Tôi đã sửa nó bằng cách thêm:

compile 'com.squareup.retrofit2:converter-gson:<latest-version>'

vào bản dựng của tôi .gradle

Sau đó chỉ định bộ chuyển đổi khi tạo phiên bản Retrofit của tôi.

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.API_BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

2
Vì vậy, tôi cố định đêm qua điều này thực sự bởi về cơ bản sao chép những 2 lớp vào dự án của tôi và gọi .addConverterFactory(GsonConverterFactory.create()). Liên kết các bộ chuyển đổi thông qua gradle rõ ràng là một lựa chọn rõ ràng hơn, vì vậy hãy đánh dấu đây là câu trả lời.
Quỹ đạo

1
Ngoài ra, hãy đảm bảo rằng phiên bản của bạn converter-gsonkhớp với phiên bản của retrofitchính bạn - xem stackoverflow.com/questions/32902157/…
gravitron

Câu trả lời này đã lỗi thời, Gradle thậm chí sẽ không đồng bộ hóa với phiên bản này, ít biên dịch hơn nhiều. Bạn cần biên dịch 'com.squareup.retrofit2: converter-gson: 2.0.2'
Andrew Koster

15

Trong Retrofit 2.0, Bộ chuyển đổi không được bao gồm trong gói và khi bạn đang sử dụng Retrofit 2.0, Hãy chắc chắn làm theo mẫu URL mới

URL cơ sở: luôn kết thúc bằng /

@Url: KHÔNG bắt đầu bằng /

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(Constants.API_BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

Để biết thêm thông tin về 2.0 Theo liên kết này Retrofit 2.0: Bản cập nhật lớn nhất

Và cũng cập nhật build.gradle.

implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"

Và thêm phần mở rộng trong tệp build.gradle cấp dự án

ext {
retrofit_version= "2.x.x"
}

Câu trả lời này không bao gồm sự phụ thuộc Gradle có liên quan.
Andrew Koster

@Ak Tôi đã đề cập đến liên kết cập nhật lớn nhất tốt nhất mà họ đã đề cập đến tất cả những điều này. Cần cập nhật cơ sở API trên phiên bản hiện tại
Ajit Kumar Dubey

7

Thay đổi phiên bản trang bị thêm cho phù hợp

Đối với tôi bên dưới sự phụ thuộc đã có

compile 'com.squareup.retrofit2:retrofit:2.0.2'

Đối với gson 2.0.2, tôi đã thay đổi

compile 'com.squareup.retrofit2:converter-gson:2.0.2'

Sau đó thêm

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.API_BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

Câu trả lời này mới nhất, nó sẽ có nhiều phiếu bầu hơn câu trả lời đã lỗi thời và nhiều hơn câu trả lời thậm chí không bao gồm sự phụ thuộc có liên quan.
Andrew Koster

6

Đối với Retrofit V2, hãy thêm các kho sau:

compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'

Bây giờ sử dụng mã bên dưới -

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

Hy vọng nó sẽ giúp :)


3

Trong Retrofit 2.0 mới nhất, bạn nên nhập phiên bản mới nhất:

compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'

Hãy cẩn thận khi gọi baseUrl(), tại v2.0, nó phải ở cuối "/" và tại phương thức này, bạn sẽ không bắt đầu url thứ bằng "/"

@POST("classes/info")
Call<ContactBean> insertInfo(@Body ContactBean bean);

Và bạn có thể xem Trang bị thêm để biết thêm thông tin! Mong sự giúp đỡ!


1

Trong trường hợp của tôi (Kotlin với coroutines), tôi đã nhận được ngoại lệ:

Không thể tạo trình chuyển đổi cho retrofit2.Call

cho phương thức Queries.exportPdf.

Nguyên nhân do: java.lang.IllegalArgumentException: Không thể định vị bộ chuyển đổi ResponseBody cho retrofit2.Call

Một vấn đề là trong một yêu cầu:

@FormUrlEncoded
@Streaming
@POST("export-pdf/")
suspend fun exportPdf(
    @Field("token") token: String
): Call<ResponseBody>

Đã xóa suspendkhỏi định nghĩa và các ngoại lệ đã biến mất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.