问题描述
经过几天的阅读教程,包括。 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 (将#修改为@)