Android 需要改装HTTP方法批注
我使用的是改型2.1,当我调用@GET时,它会说Android 需要改装HTTP方法批注,android,retrofit2,Android,Retrofit2,我使用的是改型2.1,当我调用@GET时,它会说 HTTP method annotation is required (e.g., @GET, @POST, etc.). 现在。。如果我定义@reformation.http.GET它抛出 No Retrofit annotation found. (parameter #1) 有了@POST,一切正常,一切正常 这是我的HTTP方法错误日志 11-15 12:11:20.423 25033-25506/com.app.garuda.rid
HTTP method annotation is required (e.g., @GET, @POST, etc.).
现在。。如果我定义@reformation.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
);
}
@POST
带注释的方法,必须具有标记为@Body
的参数 例如:
首先,请检查所有使用改装的类别中的进口产品 在接口Testapi中,您使用的是Refught2,但在方法getjson()中,您创建的是Refught.RestAdapter,而不是Refught2.Refugation,这显然是错误的。 请解决此问题并检查它是否正常工作 这里是关于从reftrofit 1.*到2.*迁移的非常好的教程。遵循它们,一切都应该正常工作:
为什么不直接从maven使用Reformation2 gradle依赖项例如,在附加的链接中。尝试使用此
@GET(“getq.php”)
并在baseURL的末尾加上反斜杠。尝试使用通用响应(ResponseBy)更改调用中的TestModel,看看问题是否与预期的响应不符。删除“/”没有解决,抛出的“URL路径”getq.php“必须以“/”开头。”使用ResposeBody与使用ResposeBody相同,需要使用方法或参数#1是否可以共享gradle构建文件?如果不是这样,请阅读@FormUrlEncoded。另外,您似乎正在使用2.0之前的改型版本。问题显然是2.0以上的版本。
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'
@POST("/user/mobile/verify")
VerifyCodeResponse verifyMobile(@Body VerifyRequest request);