Android 连接到远程服务器时出错
我正在尝试通过登录窗口连接到服务器。当我输入用户名和密码并单击按钮时,会显示一个错误,即应用程序已停止,下面是.java代码和logcat:Android 连接到远程服务器时出错,android,httpconnection,Android,Httpconnection,我正在尝试通过登录窗口连接到服务器。当我输入用户名和密码并单击按钮时,会显示一个错误,即应用程序已停止,下面是.java代码和logcat: package com.example.sh.mysqldemo; import android.app.AlertDialog; import android.content.Context; import android.os.AsyncTask; import java.io.BufferedReader; import java.io.Buff
package com.example.sh.mysqldemo;
import android.app.AlertDialog;
import android.content.Context;
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import javax.net.ssl.HttpsURLConnection;
public class BackgroundWorker extends AsyncTask <String, Void, String> {
Context context;
AlertDialog alertDialog;
BackgroundWorker (Context ctx){
context = ctx;
}
@Override
protected String doInBackground(String... params) {
String type = params[0];
String login_url ="http://166.87.228.72/loging.php";
if (type.equals("login")) try {
String user_name = params[1];
String password = params[2];
URL url = new URL(login_url);
HttpURLConnection httpURLConnection = (HttpsURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
String post_data = URLEncoder.encode("user_name", "UTF-8") + "=" + URLEncoder.encode(user_name, "UTF-8") + "&"
+ URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8");
bufferedWriter.write(post_data);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"));
String result = "";
String line = "";
while ((line = bufferedReader.readLine()) != null) {
result += line;
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return result;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPreExecute() {
alertDialog = new AlertDialog.Builder(context).create();
alertDialog.setTitle("login Status");
}
@Override
protected void onPostExecute(String result) {
alertDialog.setMessage(result);
alertDialog.show();
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}
package com.example.sh.mysqldemo;
导入android.app.AlertDialog;
导入android.content.Context;
导入android.os.AsyncTask;
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.OutputStream;
导入java.io.OutputStreamWriter;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.net.urlcoder;
导入javax.net.ssl.HttpsURLConnection;
公共类BackgroundWorker扩展异步任务{
语境;
警报对话框警报对话框;
BackgroundWorker(上下文ctx){
上下文=ctx;
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串类型=参数[0];
字符串登录\u url=”http://166.87.228.72/loging.php";
如果(type.equals(“login”))尝试{
字符串user_name=params[1];
字符串密码=参数[2];
URL=新URL(登录\ URL);
HttpURLConnection HttpURLConnection=(HttpsURLConnection)url.openConnection();
httpURLConnection.setRequestMethod(“POST”);
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream OutputStream=httpURLConnection.getOutputStream();
BufferedWriter BufferedWriter=新的BufferedWriter(新的OutputStreamWriter(outputStream,UTF-8));
字符串post_data=URLEncoder.encode(“用户名”,“UTF-8”)+”=“+URLEncoder.encode(用户名,“UTF-8”)+”&”
+urlcoder.encode(“密码”,“UTF-8”)+“=”+urlcoder.encode(密码,“UTF-8”);
bufferedWriter.write(post_数据);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream InputStream=httpURLConnection.getInputStream();
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(inputStream,“iso-8859-1”);
字符串结果=”;
字符串行=”;
而((line=bufferedReader.readLine())!=null){
结果+=行;
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
返回结果;
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPreExecute(){
alertDialog=新建alertDialog.Builder(context.create();
alertDialog.setTitle(“登录状态”);
}
@凌驾
受保护的void onPostExecute(字符串结果){
alertDialog.setMessage(结果);
alertDialog.show();
}
@凌驾
受保护的void onProgressUpdate(void…值){
super.onProgressUpdate(值);
}
}
而logcat如下所示:
4-12 10:15:53.764 12350-12371/com.example.sh.mysqldemo
D/NetworkSecurityConfig:未指定网络安全配置,使用
平台默认值04-12 10:15:53.776
12350-12371/com.example.sh.mysqldemo E/AndroidRuntime:FATAL
例外情况:异步任务#2
进程:com.example.sh.mysqldemo,PID:12350
java.lang.RuntimeException:执行时出错
doInBackground()
在android.os.AsyncTask$3.done处(AsyncTask.java:325)
在
java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
位于java.util.concurrent.FutureTask.setException(FutureTask.java:223)
位于java.util.concurrent.FutureTask.run(FutureTask.java:242)
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
在
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
在
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
运行(Thread.java:761)
原因:java.lang.ClassCastException:
无法强制转换com.android.okhttp.internal.huc.HttpURLConnectionImpl
到javax.net.ssl.HttpsURLConnection
在
com.example.sh.mysqldemo.BackgroundWorker.doInBackground(BackgroundWorker.java:41)
在
com.example.sh.mysqldemo.BackgroundWorker.doInBackground(BackgroundWorker.java:25)
位于android.os.AsyncTask$2.call(AsyncTask.java:305)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)