Java 连接到https://xxx.x.x.x 拒绝
我试图使用php脚本和JSON响应检索存储在Mysql数据库中的数据。但是当我运行程序时,我得到了无法连接到数据库的输出 MainActivity.javaJava 连接到https://xxx.x.x.x 拒绝,java,php,android,mysql,Java,Php,Android,Mysql,我试图使用php脚本和JSON响应检索存储在Mysql数据库中的数据。但是当我运行程序时,我得到了无法连接到数据库的输出 MainActivity.java public class MainActivity extends Activity { TextView resultView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
public class MainActivity extends Activity {
TextView resultView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.enableDefaults();
resultView = (TextView) findViewById(R.id.result);
getData();
}
public void getData() {
String result = " ";
InputStream isr = null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://192.168.x.xx/sheetal/getdata.php");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
isr = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection" + e.toString());
resultView.setText("Could'nt connect to database");
}
//convert response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(isr, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
isr.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result" + e.toString());
}
//parse json data
try {
String s = "";
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
JSONObject json = jArray.getJSONObject(i);
s = s +
"Name: " + json.getString("Firstname") + " " + json.getString("Lastname") + "\n" +
"Age: " + json.getInt("Age") + "\n" +
"Mobile Using: " + json.getString("Product") + "\n\n";
}
resultView.setText(s);
} catch (Exception e) {
Log.e("log-teg", "Error Parsing Data" + e.toString());
}
}
}
使用异步任务非常简单
String urls = "http://euroinvo.co.in/gkdb/gkdb";
new DownloadDb().execute(urls);
class DownloadDb extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... aurl) {
int count;
String fullpath = "";
try {
URL url = new URL(aurl[0]);
Log.e(aurl[0], "Url Executing");
URLConnection conexion = url.openConnection();
conexion.setConnectTimeout(100);
// conexion.connect();
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
// Get directory
InputStream input = new BufferedInputStream(url.openStream());
BufferedReader reader = new BufferedReader(new
InputStreamReader(input,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while((line = reader.readLine())!= null){
sb.append(line + "\n");
}
isr.close();
result=sb.toString();
} catch (Exception e) {
Log.d("error", e.getMessage());
}
return fullpath;
}
stringurl=”http://euroinvo.co.in/gkdb/gkdb";
新建DownloadDb().execute(URL);
类DownloadDb扩展异步任务{
@凌驾
受保护的字符串背景(字符串…aurl){
整数计数;
字符串fullpath=“”;
试一试{
URL=新URL(aurl[0]);
Log.e(aurl[0],“Url正在执行”);
URLConnection conexion=url.openConnection();
conexion.setConnectTimeout(100);
//conexion.connect();
int lenghtOfFile=conexion.getContentLength();
Log.d(“ANDRO_ASYNC”,“文件长度:“+lenghtOfFile”);
//获取目录
InputStream输入=新的BufferedInputStream(url.openStream());
BufferedReader读取器=新的BufferedReader(新的
InputStreamReader(输入,“iso-8859-1”),8);
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
isr.close();
结果=sb.toString();
}捕获(例外e){
Log.d(“错误”,例如getMessage());
}
返回全路径;
}
调用DefaultHttpClient()
方法时出现问题
当您使用Https时,您需要使用HttpClient,如下所示:
创建一个单独的方法,如下所示
private DefaultHttpClient getHttpClient()
{
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("https", SSLSocketFactory
.getSocketFactory(), 443));
HttpParams params = new BasicHttpParams();
int timeoutConnection = 30000;
HttpConnectionParams.setConnectionTimeout(params, timeoutConnection);
int timeoutSocket = 30000;
HttpConnectionParams.setSoTimeout(params, timeoutSocket);
params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30);
params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE,
new ConnPerRouteBean());
params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(
params, schemeRegistry);
DefaultHttpClient client = new DefaultHttpClient(cm, params);
client.setRoutePlanner(new DefaultHttpRoutePlanner(schemeRegistry));
return (client);
}
将此方法添加到代码中,并在下面的行中进行修改
HttpClient httpclient = new DefaultHttpClient();HttpClient httpclient = new DefaultHttpClient();
对此,
HttpClient httpclient = getHttpClient();
您的主线程有更多的操作。您可以使用asynctask来完成此操作。这是一种更简单的方法 这是异步任务的guid 或者,您可以在不执行asynctask的情况下检查此项
您是在Emulator上还是在真实设备上进行尝试?我在Emulator上进行尝试。您可以使用AsyncTask进行此操作。这是一种合适的开发方式。PS:您应该在AsyncTask中进行网络操作发布整个日志,这样只有我们才能确定问题。我认为您的url是错误的。请检查完整的url。检查url中的x值().
private DefaultHttpClient getHttpClient()
{
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("https", SSLSocketFactory
.getSocketFactory(), 443));
HttpParams params = new BasicHttpParams();
int timeoutConnection = 30000;
HttpConnectionParams.setConnectionTimeout(params, timeoutConnection);
int timeoutSocket = 30000;
HttpConnectionParams.setSoTimeout(params, timeoutSocket);
params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30);
params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE,
new ConnPerRouteBean());
params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(
params, schemeRegistry);
DefaultHttpClient client = new DefaultHttpClient(cm, params);
client.setRoutePlanner(new DefaultHttpRoutePlanner(schemeRegistry));
return (client);
}
HttpClient httpclient = new DefaultHttpClient();HttpClient httpclient = new DefaultHttpClient();
HttpClient httpclient = getHttpClient();