簡體   English   中英

改裝2未找到注釋

[英]Retrofit 2 no annotation found

我正在嘗試從Firebase獲取特定數據。 在客戶端使用REST API和Retrofit 2。

這是我在Firebase上的JSON結構:

{
"profiles" : {
"-KAG0XPBVNNF_RT55lwV" : {
  "GCMTocken" : "rtdjhsrfjt546456",
  "firstName" : "P",
  "gender" : 1,
  "lastName" : "Strongman",
  "likes" : 0,
  "nickname" : "drake1",
  "uid" : "facebook:957484"
}
}
}

請求界面:

@GET("/profiles.json")
Observable<Profile> getProfile(@Query("orderBy") String key, @Query("equalTo") String uid);

在此請求下,我總是得到:

java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #1) 
for method FirebaseAPI.getProfile

編輯

我需要這個要求:

https://incandescent-torch-4.firebaseio.com/profiles.json?orderBy="uid"&equalTo="facebook:95748485767896"

我的改造設置:

String BASE_FIREBASE_URL = "https://incandescent-torch-4.firebaseio.com";

OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
            .build();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.BASE_FIREBASE_URL)
            .client(okHttpClient)
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    restAPI = retrofit.create(FirebaseAPI.class);

來自RxJava的請求:

RestFirebaseClient.getInstance().getProfile(authData.getUid())
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Subscriber<Profile>() {
                            @Override
                            public void onCompleted() {

                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onNext(Profile profile) {

                            }
                        });
I observe in your code request @GET request just put "/" & make sure in you url you have to remove "/" at the end of url like - 
like this - 

Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("https://incandescent-torch-4.firebaseio.com")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

@GET("/profiles.json")
Observable<Profile> getProfile(@Query("orderBy") String key, @Query("equalTo") String uid);

這包括在改造文檔中。

將Retrofit 2依賴項添加到Gradle:

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'
compile 'com.squareup.retrofit2:converter-jackson:2.0.0-beta3'
compile 'com.squareup.okhttp3:logging-interceptor:3.0.0-RC1'

初始化改造:

OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new HttpLoggingInterceptor()
                        .setLevel(HttpLoggingInterceptor.Level.BODY))
                .addInterceptor(new TokenInterceptor())
                .addInterceptor(new AuthenticationInterceptor())
                .build();

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://your_url/")
                .addConverterFactory(JacksonConverterFactory.create())
                .client(client)
                .build();

創建翻新服務,例如:

import retrofit2.Call;
import retrofit2.http.GET;

public interface ProfileService {

    @GET("profile")
    Call<User> get();
}

我使用了@GET("profile") ,最后的URL是: http://your_url/profile

您可能嘗試將Observable<Profile>更改為Call<Profile>並從@GET("profiles.json")刪除.json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM