2016-04-16 9 views
1

これについていくつか質問がありますが、何も動作していないようです。 私はJsonオブジェクトの形をしたWebページのコンテンツを取得しようとしています。Android - Retrofit 2エラー:「HTTPメソッド注釈が必要です」

を追加しました。このproguard-rules.proへ:

<pre><code>-keepattributes *Annotation* 
-keep class retrofit.** { *; } 
-keepclasseswithmembers class * { 
@retrofit.http.* <methods>; } 
-keepattributes Signature 

-keep class com.google.gson.** { *; } 
-keep class com.google.inject.** { *; } 
-keep class org.apache.http.** { *; } 
-keep class org.apache.james.mime4j.** { *; } 
-keep class javax.inject.** { *; } 
-keep class retrofit.** { *; } </pre></code> 

マイbuild.gradle

<pre><code> apply plugin: 'com.android.application' 
apply plugin: 'realm-android' 

android { 
    packagingOptions { 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/NOTICE.txt' 
    } 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 
    useLibrary 'org.apache.http.legacy' 

    defaultConfig { 
     applicationId "com.myApplication" 
     minSdkVersion 19 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:24.0.0-alpha1' 
    compile 'com.android.support:design:24.0.0-alpha1' 
    compile 'com.android.support:support-v4:24.0.0-alpha1' 
    compile 'com.google.android.gms:play-services-maps:8.4.0' 
    compile 'com.google.android.gms:play-services-appindexing:8.4.0' 
    compile 'org.apache.commons:commons-lang3:3.4' 
    compile 'com.squareup.okhttp3:okhttp:3.2.0' 
    compile 'com.squareup.retrofit2:retrofit:2.0.2' 
    compile 'com.google.code.gson:gson:2.4' 
    compile 'org.glassfish:javax.annotation:10.0-b28' 
}</pre></code> 

インタフェース:これは誤りである

<pre><code> public interface LoginInterface { 

    @GET("[email protected]&password=opensesame") 
     Boolean getData(Callback<LoginJsonParser> cb); 
}</pre></code> 

LoginJsonParser class: 

<pre><code> import javax.annotation.Generated; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

@Generated("org.jsonschema2pojo") 
public class LoginJsonParser { 

    @SerializedName("success") 
    @Expose 
    private Integer success; 

    @SerializedName("message") 
    @Expose 
    private String message; 

    /** 
    * 
    * @return The success 
    */ 
    public Integer getSuccess() { 
     return success; 
    } 

    /** 
    * 
    * @param success The success 
    */ 
    public void setSuccess(Integer success) { 
     this.success = success; 
    } 

    /** 
    * 
    * @return The message 
    */ 
    public String getMessage() { 
     return message; 
    } 

    /** 
    * 
    * @param message The message 
    */ 
    public void setMessage(String message) { 
     this.message = message; 
    } 

}</pre></code> 

<pre><code>java.lang.RuntimeException: An error occurred while executing doInBackground() 
at android.os.AsyncTask$3.done(AsyncTask.java:309) 
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 
Caused by: retrofit.RetrofitError: LoginInterface.isLoginValid: 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 java.lang.reflect.Proxy.invoke(Proxy.java:393) 
at $Proxy0.isLoginValid(Unknown Source) 
at com.myApplication.activity.Login$UserLoginTask.doInBackground(Login.java:344) 
at com.myApplication.activity.Login$UserLoginTask.doInBackground(Login.java:318) 
at android.os.AsyncTask$2.call(AsyncTask.java:295) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
at java.lang.Thread.run(Thread.java:818)  
Caused by: java.lang.IllegalArgumentException: LoginInterface.isLoginValid: 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 java.lang.reflect.Proxy.invoke(Proxy.java:393)  
at $Proxy0.isLoginValid(Unknown Source)  
at com.myApplication.activity.Login$UserLoginTask.doInBackground(Login.java:344)  
at com.myApplication.activity.Login$UserLoginTask.doInBackground(Login.java:318)  
at android.os.AsyncTask$2.call(AsyncTask.java:295)  
at java.util.concurrent.FutureTask.run(FutureTask.java:237)  
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
at java.lang.Thread.run(Thread.java:818) </code></pre> 
+0

HTTPメソッドアノテーションが必要です(@ GET、@POSTなど) –

+0

Retrofit 2が 'retrofit2。*'パッケージに含まれていると考えました。どういうわけかベータ版やRetrofit 1をインポートしていないのですか? Btwでは、API 23に対してコンパイルする場合、サポートlibs 23.3.0を使用したいと考えています。 –

+0

retrofit。*からretrofit2。*に変更されました。同じエラーが表示されます。 – Mikey

答えて

1

間違った「@GET」を使用しています。

私は最初に同じ問題に直面していました。 Retrofit1からRetrofit2に移行するときの非常によくある間違いです。インターフェイスで、GETに正しいimportステートメントを使用していることを確認します。私はretrofit.httpから@GETを使用していて、retrofit2.httpから@GETを使用していなかったことに気がつかず、retrofit.httpからretrofit2.httpへの注釈を変更するとジョブが実行されます。

関連する問題