我正在使用改装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'
答案 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依赖项? - 例如在附加链接中。