2016-11-15 3 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(); 
     } 
    }); 


} 

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

попробуйте с этим '@GET (" getq.php ")' и положите обратную косую черту на вашем основанииURL. – sushildlh

+0

Попробуйте изменить TestModel в вызове с общим ответом (ResponseBody), чтобы узнать, не проблема с ожидаемым ответом. – 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. Также кажется, что вы используете версию Retrofit до 2.0. И вопрос явно для версии выше 2.0. – toshkinl

Смежные вопросы