改型-Android:请求方法不被接受
在我的android应用程序中,我尝试使用改型来进行api调用。我想使用改型执行用户注册。问题是,api调用被执行,调试器也转到改型-Android:请求方法不被接受,android,retrofit,retrofit2,okhttp3,android-webservice,Android,Retrofit,Retrofit2,Okhttp3,Android Webservice,在我的android应用程序中,我尝试使用改型来进行api调用。我想使用改型执行用户注册。问题是,api调用被执行,调试器也转到onResponse(),但我的api返回的响应消息为“请求方法未接受”。我和邮递员核实过了,它工作正常。在postman中,我将值作为表单数据传递。请帮我解决这个问题。这是我的密码: public interface RegisterAPI { @FormUrlEncoded @POST("Register.php") Call<Regi
onResponse()
,但我的api返回的响应消息为“请求方法未接受”。我和邮递员核实过了,它工作正常。在postman中,我将值作为表单数据传递。请帮我解决这个问题。这是我的密码:
public interface RegisterAPI {
@FormUrlEncoded
@POST("Register.php")
Call<RegisterPojo> insertUser(
@Field("username") String username,
@Field("email") String email,
@Field("password") String password,
@Field("c_password") String c_password
);
}
格雷德尔先生
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig {
applicationId "app.sample"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.0'
testCompile 'junit:junit:4.12'
compile 'com.github.aakira:expandable-layout:1.5.1@aar'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
// compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.google.code.gson:gson:2.7'
}
请告诉我哪里出错。在onResponse()
中,最好检查查询执行是否成功,然后从Response
对象的主体获取消息
call.enqueue(new Callback<RegisterPojo>() {
@Override
public void onResponse(Call<RegisterPojo> call, Response<RegisterPojo> response){
if(response.isSuccess())
{
// Now try to get message from the body
}
else
{
// Error occurred while execution
}
}
@Override
public void onFailure(Call<RegisterPojo> call, Throwable t) {
Log.e("msg", "Failed");
}
});
如果响应成功,并且您无法获得数据,那么问题在于您的RegisterPojo
模型。您正在使用的转换库无法将JSON转换为对象。还要确保在此模型中实现了Serializable
检查此项并验证RegisterPojo
的格式是否正确
对我来说,像这样初始化改造是可行的:
private static Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
.serializeNulls()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
在onResponse()
中,最好检查查询执行是否成功,然后从Response
对象的主体获取消息
call.enqueue(new Callback<RegisterPojo>() {
@Override
public void onResponse(Call<RegisterPojo> call, Response<RegisterPojo> response){
if(response.isSuccess())
{
// Now try to get message from the body
}
else
{
// Error occurred while execution
}
}
@Override
public void onFailure(Call<RegisterPojo> call, Throwable t) {
Log.e("msg", "Failed");
}
});
如果响应成功,并且您无法获得数据,那么问题在于您的RegisterPojo
模型。您正在使用的转换库无法将JSON转换为对象。还要确保在此模型中实现了Serializable
检查此项并验证RegisterPojo
的格式是否正确
对我来说,像这样初始化改造是可行的:
private static Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
.serializeNulls()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
您必须将接口声明为
调用插入器(@Body UserClass user)代码>
若您可以从日志拦截器检查您的请求,您将看到您的请求主体为
用户名:姓名,电子邮件:email@m.com
但它应该是
{“用户名”:姓名,“电子邮件”:email@m.com…}
idk为什么,但我提出了这样的工作要求(身体和班级)。我确信有一种方法可以使它与字段一起工作,但我找不到。您必须将接口声明为调用插入器(@Body UserClass user)代码>
若您可以从日志拦截器检查您的请求,您将看到您的请求主体为
用户名:姓名,电子邮件:email@m.com
但它应该是
{“用户名”:姓名,“电子邮件”:email@m.com…}
idk为什么,但我提出了这样的工作要求(身体和班级)。我确信有一种方法可以使它与字段一起工作,但我找不到。将设备日志放在此处您的api可能只接受GET方法。不,它接受POST方法。我在postman中使用POST方法执行了相同的api。它可以很好地使用@POST(“Register.php”)中的.remove.php,并像这样使用@POST(“/Register”)
。…..还可以编辑您的logcat错误…将设备日志放在这里您的api可能只接受GET方法。不,它接受POST方法。我在postman中使用POST方法执行了相同的api。它可以很好地与之配合使用。从@POST(“Register.php”)中删除.php,然后像这样使用@POST(“/Register”)
,还可以编辑关于问题的logcat错误……我检查了,它在response.issucess()中。这意味着api调用成功。@zanky请查看我的更新答案。还要确保RegisterPojo
格式正确。我在问题中添加了RegisterPojo
。尝试添加可序列化的,例如:公共类RegisterPojo实现可序列化的
我选中了,它在response.isSuccess()中。这意味着api调用成功。@zanky请查看我的更新答案。还要确保RegisterPojo
格式正确。我在问题中添加了RegisterPojo
。尝试添加可序列化的,例如:公共类RegisterPojo实现可序列化的
private static Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
.serializeNulls()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();