需要改进HTTP方法注释

时间:2016-11-15 11:28:11

标签: android retrofit2

我正在使用改装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();
        }
    });


}

Gradle文件

    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'

2 个答案:

答案 0 :(得分:1)

@POST带注释的方法,必须有参数,标记为@Body
例如:

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

答案 1 :(得分:0)

首先,请检查所有使用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依赖项? - 例如在附加链接中。