当前位置: 首页 > 知识库问答 >
问题:

总是在改造2.0的失败中前进

孙星鹏
2023-03-14

我想打api:www.xyz.com/abc_cc/cc/userregister/newuser

这是我的代码:

    public class MainActivity extends AppCompatActivity {


    public static final String BASE_URL = "abc.com/abc_cc/cc/";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
.client(getUnsafeOkHttpClient())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        Endpoints endpoints= retrofit.create(Endpoints.class);
        endpoints.newuser("{\"full_name\":\"sss\",\"states_id\":\"20\",\"mobile\":\"9876543210\",\"password\":\"******\",\"accept_terms\":true,\"Userid\":\"0\",\"refer\":\"\",\"ip-address\":\"1.2.3.4\",\"device_type\":\"samsung J5\",\"os-version\":\"5.0.1\",\"client\":\"app\",\"secret_key\":\"44\"}")
                .enqueue(new retrofit2.Callback<Items>() {
                    @Override
                    public void onResponse(retrofit2.Call<Items> call, retrofit2.Response<Items> response) {
                        System.out.println("onResponse : "+response.message());
                        System.out.println("onResponse : "+response.body());
                        System.out.println("onResponse : "+response.code());
                        System.out.println("onResponse : "+response.errorBody());
                        System.out.println("onResponse : "+response.isSuccessful());
                        System.out.println("onResponse : "+response.raw());
                        System.out.println("onResponse : "+response);
                    }

                    @Override
                    public void onFailure(retrofit2.Call<Items> call, Throwable t) {
                        System.out.println("onFailure"+call);

                    }
                });


    }

    public static OkHttpClient getUnsafeOkHttpClient() {

        try {
            // Create a trust manager that does not validate certificate chains
            final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                @Override
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] chain,
                        String authType) throws CertificateException {
                }

                @Override
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] chain,
                        String authType) throws CertificateException {
                }

                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new java.security.cert.X509Certificate[0];
                }
            } };

            // Install the all-trusting trust manager
            final SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, trustAllCerts,
                    new java.security.SecureRandom());
            // Create an ssl socket factory with our all-trusting manager
            final SSLSocketFactory sslSocketFactory = sslContext
                    .getSocketFactory();

            OkHttpClient okHttpClient = new OkHttpClient();
            okHttpClient = okHttpClient.newBuilder()
                    .sslSocketFactory(sslSocketFactory)
                    .hostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER).build();

            return okHttpClient;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

}

接口:

public interface Endpoints {
    @POST("/userregister/newuser")
    @FormUrlEncoded
    Call<Items> newuser(@Field("Data") String Data);

}

POJO类:

public class Items {
    @SerializedName("Response-Status")
    @Expose
    private Boolean responseStatus;
    @SerializedName("Response-Validate")
    @Expose
    private Boolean responseValidate;
    @SerializedName("Response-Message")
    @Expose
    private String responseMessage;
    @SerializedName("Response-Data")
    @Expose
    private ResponseData responseData;

    public Boolean getResponseStatus() {
        return responseStatus;
    }

    public void setResponseStatus(Boolean responseStatus) {
        this.responseStatus = responseStatus;
    }

    public Boolean getResponseValidate() {
        return responseValidate;
    }

    public void setResponseValidate(Boolean responseValidate) {
        this.responseValidate = responseValidate;
    }

    public String getResponseMessage() {
        return responseMessage;
    }

    public void setResponseMessage(String responseMessage) {
        this.responseMessage = responseMessage;
    }

    public ResponseData getResponseData() {
        return responseData;
    }

    public void setResponseData(ResponseData responseData) {
        this.responseData = responseData;
    }

}

我得到了这样的回应:

{protocol=http/1.1, code=404, message=Not Found, url=www.xyz.com/userregister/newuser}

我已经给出了正确的url,那么为什么只需要一半?

我已经试过了https://code.tutsplus.com/tutorials/sending-data-with-retrofit-2-http-client-for-android--cms-27845.这个示例和示例中给出的链接运行良好,但如果我对url执行相同操作,则会出现上述错误

共有3个答案

宦瀚
2023-03-14

请参阅改装文档。请特别注意以下内容:

基本URL应始终以 /.结尾

尾随/确保作为相对路径的endpoint值将正确地附加到具有路径组件的基。

...

包含前导/的endpoint值是绝对值。

绝对值仅保留来自base Url的主机,并忽略任何指定的路径组件。

正如目前编写的,在对endpoint的调用中引用的路径。newuser()是绝对的,因此会删除基本URL中主机之后的路径段(因为这是有文档记录的行为)。

因此,您应该更改endpoint接口以使用相对路径,如下所示:

    public interface Endpoints {
        @POST("userregister/newuser")
        @FormUrlEncoded
        Call<Items> newuser(@Field("Data") String Data);
    }
锺离浩慨
2023-03-14

为此更改endpoint界面:

public interface Endpoints {
    @POST("userregister/newuser")
    @FormUrlEncoded
    Call<Items> newuser(@Field("Data") String Data);

}

请注意,我删除了尾部斜杠。这种改装方式将您定义的路径附加到BASE\u URL。

蔺翰音
2023-03-14

我希望您能检查一下可能出现的解析问题。

 @Override
public void onFailure(retrofit2.Call<Items> call, Throwable t) {
 System.out.println("onFailure"+call);

//添加这个lije你有例外。

 t.printStackTrace();
 }
 类似资料:
  • 以前版本的改造使用RestaAdapter,并提供了启用日志的功能。为什么在改型2.0中删除了该功能? 要启用日志,我必须。。 这是唯一的解决办法吗?以前的规定非常方便...

  • 问题内容: 我尝试调用-method,但是它总是失败。我的变量始终是。我在这里查看了一些类似的帖子,但没有一个完全适合我的需求。这是我的代码: 这是我尝试解决的方法: 我尝试使用该方法 并且 但是没有任何效果。一直都是。我还尝试给它一个文字字符串作为路径,设置为,甚至更改了我想将其设置为777的目录权限,但注意了。永远是错误的。希望您能为您提供帮助。任何帮助都非常感谢。谢谢 问题答案: 这是一个问

  • 我是android编程的新手,我正在尝试通过改造连接到服务器并获取一些数据。我做了一个小例子来检查它是否会返回一些数据。首先,我不知道我是否编写了代码来做我想做的事情,其次,我得到了错误: "错误:(64,52)错误:不是抽象的,并且不重写回调中的抽象方法失败(RetrofitError)"和2个错误"错误:(67,13)错误:方法不重写或实现超类型中的方法" 这是我的代码。 }和我的改装界面 }

  • 问题内容: 我正在使用hamcrest 1.3测试我的代码。这简直是​​死。我试图对其进行测试,以确保生成的数字小于13。我有一条打印语句,其中打印了生成的数字。生成的数字始终小于13,但测试始终失败。我做错什么了吗? 这是我正在测试的代码。 这是我的测试代码。 编辑:这是故障堆栈跟踪。 问题答案: 这是帮助我解决问题的站点。 http://code.google.com/p/hamcrest/i

  • 我已经安装了npm selenium驱动程序,现在我想尝试使用它。 我已经创建了一个js文件测试。js 我从控制台发送这个节点cmd $节点测试\js\test.js (节点:5648)UnhandledPromiseRejest警告:NoSuchElementError:无法定位元素:*[id="login_login_username"] 在Object.throwDecodedError(C

  • 我有一个,它扩展了一个名为的基本所有这些所做的就是创建一个位置服务客户端 和