2016-11-15 33 views
0

我使用改裝2.1,當我打電話@GET它說改造HTTP方法註釋需要

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' 
+0

嘗試使用此'@GET(「getq.php」)'並在您的baseURL末尾放置反斜槓。 – sushildlh

+0

嘗試使用通用響應(ResponseBody)調用呼叫中的TestModel來查看問題是否與預期響應不符。 – toshkinl

+0

刪除「/」沒有解決,拋出「URL路徑」getq.php「必須以'/'開頭。」 – Ghirma

回答

0

首先請檢查您的進口中,使用改造所有clases。

在您的界面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

你爲什麼不使用retrofit2 gradle這個依賴直接從行家? - 例如在附加鏈接中。

+0

直接從maven導入解決了問題 – Ghirma

1

@POST註解的方法,必須有參數,標記爲@Body
舉例:

所有的
@POST("/user/mobile/verify") 
VerifyCodeResponse verifyMobile(@Body VerifyRequest request); 
+0

這是不正確的,請閱讀@FormUrlEncoded。此外,您似乎在2.0之前使用Retrofit版本。問題顯然是2.0以上的版本。 – toshkinl