Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
改型-Android:请求方法不被接受_Android_Retrofit_Retrofit2_Okhttp3_Android Webservice - Fatal编程技术网

改型-Android:请求方法不被接受

改型-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

在我的android应用程序中,我尝试使用改型来进行api调用。我想使用改型执行用户注册。问题是,api调用被执行,调试器也转到
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();