簡體   English   中英

需要改造HTTP方法注釋

[英]Retrofit HTTP method annotation is required

我正在使用改造2.1,當我調用@GET時說

HTTP method annotation is required (e.g., @GET, @POST, etc.).

現在..如果我定義@ retrofit.http.GET它會拋出

No Retrofit annotation found. (parameter #1)

使用@POST可以,可以使用!

那是我的HTTP方法錯誤日志...

11-15 12:11:20.423 25033-25506/com.app.garuda.ridernet E/UncaughtException: java.lang.RuntimeException: An error occured while executing doInBackground()
                                                                                at android.os.AsyncTask$3.done(AsyncTask.java:300)
                                                                                at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                                                                                at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                                                                                at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                                at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                                                                                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                                                at java.lang.Thread.run(Thread.java:841)
                                                                             Caused by: retrofit.RetrofitError: gitapi.getquery: HTTP method annotation is required (e.g., @GET, @POST, etc.).
                                                                                at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:400)
                                                                                at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240)
                                                                                at $Proxy0.getquery(Native Method)
                                                                                at com.app.garuda.ridernet.SignIn.getjson(SignIn.java:92)
                                                                                at com.app.garuda.ridernet.SignIn.access$100(SignIn.java:28)
                                                                                at com.app.garuda.ridernet.SignIn$download.doInBackground(SignIn.java:125)
                                                                                at android.os.AsyncTask$2.call(AsyncTask.java:288)
                                                                                at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                                at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                                                                                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                                                                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                                                                                at java.lang.Thread.run(Thread.java:841) 
                                                                             Caused by: java.lang.IllegalArgumentException: gitapi.getquery: HTTP method annotation is required (e.g., @GET, @POST, etc.).
                                                                                at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:107)
                                                                                at retrofit.RestMethodInfo.parseMethodAnnotations(RestMethodInfo.java:179)
                                                                                at retrofit.RestMethodInfo.init(RestMethodInfo.java:117)
                                                                                at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:294)
                                                                                at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) 
                                                                                at $Proxy0.getquery(Native Method) 
                                                                                at com.app.garuda.ridernet.SignIn.getjson(SignIn.java:92) 
                                                                                at com.app.garuda.ridernet.SignIn.access$100(SignIn.java:28) 
                                                                                at com.app.garuda.ridernet.SignIn$download.doInBackground(SignIn.java:125) 
                                                                                at android.os.AsyncTask$2.call(AsyncTask.java:288) 
                                                                                at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                                                                                at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                                                                                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                                                                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                                                                                at java.lang.Thread.run(Thread.java:841) 

我的界面:

 import okhttp3.ResponseBody;
 import retrofit2.Call;
 import retrofit2.http.Field;
 import retrofit2.http.FormUrlEncoded;
 import retrofit2.http.GET; 
 import retrofit2.http.POST;
 import retrofit2.http.Query;


 public interface Testapi {


    @GET("/getq.php")
    Call<Testmodel> getquery(
            @Query("sort") String order
    );


    @FormUrlEncoded
    @POST("/insert.php")
    Call<ResponseBody> insert(
            @Field("nick") String nick,
            @Field("mail") String mail
    );

}

和方法

private void getjson() {
    //Creating a rest adapter

    RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ROOT_URL).build();

    //Creating an object of our api interface
    Testapi api = adapter.create(Testapi.class);
    Call<Testmodel> call = api.getquery("a");

    call.enqueue(new Callback<Testmodel>() {
        @Override
        public void onResponse(Call<Testmodel> call, Response<Testmodel> response) {
            try {
                Testmodel obj = response.body();

                TextView txt = (TextView) findViewById(R.id.textView);
                txt.setText("ID: " + obj.getId() + "   nick: " + obj.getNick() + "   mail: " + obj.getMail());

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(Call<Gitmodel> call, Throwable throwable) {
            Toast.makeText(SignIn.this, "FALLIMENTO",     Toast.LENGTH_LONG).show();
        }
    });


}

搖籃文件

    apply plugin: 'com.android.application'

android {
compileSdkVersion 24
buildToolsVersion "23.0.2"
defaultConfig {

    multiDexEnabled true
    applicationId "xxx"
    minSdkVersion 17
    targetSdkVersion 24
    versionCode 1
    versionName "0.1"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
 }



dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])

   androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',  {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile files('libs/retrofit-2.1.0.jar')
compile files('libs/gson-2.7.jar')
compile files('libs/okhttp-3.4.1.jar')
compile files('libs/okio-1.11.0.jar')

compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.google.android.gms:play-services:9.2.1'
compile 'com.android.support:design:24.1.1'
compile 'com.android.support:multidex:1.0.1'
compile 'com.google.android.gms:play-services-maps:9.2.1'
testCompile 'junit:junit:4.12'
}



apply plugin: 'com.google.gms.google-services'

@POST注釋方法,必須具有參數,標記為@Body
例:

@POST("/user/mobile/verify")
VerifyCodeResponse verifyMobile(@Body VerifyRequest request);

首先,請檢查所有使用Retrofit的商品的進口。

在您的接口Testapi中,您使用Retrofit2,但是在您的方法getjson()中,您正在創建retrofit.RestAdapter而不是retrofit2.Retrofit,這肯定是錯誤的。

請解決此問題,然后檢查其是否有效。

PS。 這是有關從reftrofit 1. *遷移到2. *的非常不錯的教程。 跟隨他們,一切都應該正常工作:

https://futurestud.io/tutorials/retrofit-2-upgrade-guide-from-1-9 https://inthecheesefactory.com/blog/retrofit-2.0/en

為什么不直接從Maven使用Retrofit2 Gradle依賴關系? -例如像在附加鏈接中。

暫無
暫無

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

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