坚持改造 2 okHttp

问题描述

经过几天的阅读教程,包括。 android 开发者页面等。我很沮丧。 我尝试向我的云服务器发出请求,在那里我与用户一起运行数据库我有我的 SSL 证书。问题是真的没有任何工作。我尝试了很多代码。 第一步是使用我的 XAMPP MysqL 数据库测试登录,第一步,它起作用了。现在,在尝试对我的服务器实施 HTTPS 后,什么也不会发生。也许有人可以帮助我。

这是我的实际代码

apiclient.java

public abstract class apiclient {

    public static final String BASE_URL = "https://87.106.205.247/";

    public static Retrofit retrofit = null;

    public static Object getapiclient() throws IOException,KeyStoreException,CertificateException,NoSuchAlgorithmException,KeyManagementException {

        CertificateFactory cf = CertificateFactory.getInstance("X.509");

        InputStream caInput = new BufferedInputStream(new FileInputStream("load-der.crt"));
        Certificate ca;
        try {
            ca = cf.generateCertificate(caInput);
            System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
        } finally {
            caInput.close();
        }

        String keyStoreType = KeyStore.getDefaultType();
        KeyStore keyStore = KeyStore.getInstance(keyStoreType);
        keyStore.load(null,null);
        keyStore.setCertificateEntry("ca",ca);

        String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
        tmf.init(keyStore);

        SSLContext context = SSLContext.getInstance("TLS");
        context.init(null,tmf.getTrustManagers(),null);

        return context;

        HttpsURLConnection urlConnection =
                (HttpsURLConnection)url.openConnection();
        urlConnection.setSSLSocketFactory(context.getSocketFactory());
        InputStream in = urlConnection.getInputStream();
        copyInputStreamToOutputStream(in,System.out);


        OkHttpClient okHttpClient = new OkHttpClient().newBuilder().addInterceptor(new Interceptor() {
            @Override
            public okhttp3.Response intercept(Chain chain) throws IOException {
                Request originalRequest = chain.request();

                Request.Builder builder = originalRequest.newBuilder().header("Authorization",Credentials.basic("username","XXXXXXXX"));

                Request newRequest = builder.build();
                return chain.proceed(newRequest);
            }
        }).build();

        if(retrofit == null)
        {
            Gson gson = new GsonBuilder()
                    .setLenient()
                    .create();

            retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
                    .client(okHttpClient)
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
        }
        return retrofit;
    }

    private static void copyInputStreamToOutputStream(InputStream in,PrintStream out) {
    }
}

API接口

public interface ApiInterface {

    @FormUrlEncoded
    @POST("login_retrofit.PHP")
    Call<KimbaUsersModel> login(@Field("email") String email,@Field("password") String password);
}

登录片段

public class LoginRetrofit extends Fragment {
    ApiInterface apiInterface;
    private Button btn_login;
    private EditText email,password;

    public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.logintest,container,false);

        btn_login = view.findViewById(R.id.btn_logintest);
        email = view.findViewById(R.id.etEmail);
        password = view.findViewById(R.id.etPassword);

        btn_login.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                login();
            }

        public void login() {

            try {
                apiInterface = apiclient.getapiclient().create(ApiInterface.class);
            } catch (IOException e) {
                e.printstacktrace();
            } catch (KeyStoreException e) {
                e.printstacktrace();
            } catch (CertificateException e) {
                e.printstacktrace();
            } catch (NoSuchAlgorithmException e) {
                e.printstacktrace();
            } catch (KeyManagementException e) {
                e.printstacktrace();
            }

            Call<KimbaUsersModel> kimbaUsersCall = apiInterface.login(email.getText().toString(),password.getText().toString());

            kimbaUsersCall.enqueue(new Callback<KimbaUsersModel>() {
                @Override
                public void onResponse(Call<KimbaUsersModel> call,Response<KimbaUsersModel> response) {
                    if(response.body() != null){
                        KimbaUsersModel kimbaUsers = response.body();
                        Log.e("Fehler: ",response.toString());

                        if(kimbaUsers.isSuccess()){
                            Toast.makeText(getActivity(),"Login erfolgreich",Toast.LENGTH_SHORT).show();
                        }
                        else {
                            Toast.makeText(getActivity(),"Benutzer nicht registriert "
                                    +kimbaUsers.getMessage(),Toast.LENGTH_SHORT).show();
                        }
                    }
                }

                @Override
                public void onFailure(Call<KimbaUsersModel> call,Throwable t) {
                    Toast.makeText(getActivity(),"Login nicht erfolgreich" +t,Toast.LENGTH_SHORT).show();
                    Log.e("Fehler: ",t.toString());
                }
            });
        }
        });
        return view;
    }
}

和我的 Model.class

public class KimbaUsersModel {

    @Expose
    @Serializedname("email")
    private String email;

    @Expose
    @Serializedname("password")
    private String password;

    @Expose
    @Serializedname("success")
    private boolean success;

    @Expose
    @Serializedname("message")
    private String message;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getpassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

我知道我必须实现 doInBackground 和其他一些东西。但是我的问题是所有的教程都两三年了。

非常感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)