在 Android 中通过 XAMPP 连接到 MYSQL

Posted

技术标签:

【中文标题】在 Android 中通过 XAMPP 连接到 MYSQL【英文标题】:Connecting to MYSQL via XAMP in Android 【发布时间】:2013-08-11 07:10:20 【问题描述】:

我正在尝试通过 XAMP 将我的 android 应用程序与 mysql 连接起来。我一直在寻找其他类似的问题,但任何问题都对我有帮助。我试图在模拟器中运行代码,但它给我带来了数据库和其他东西的问题。 MYSQL 中的表有 2 个字段,传感器和校准(均为字符串)。 cm.GetMobileUnits 工作正常并返回一个包含两个字段的 Pair。这是安卓代码:

Thread thread = new Thread(new Runnable()
        @Override
        public void run() 
            try 
                ArrayList<Pair<String, String>> stringList = cm.getMobileUnits("Mobile Device");
                //Log.d("MYSQL", "Tuplas adquiridas");
                String url="http://192.168.1.10/test.php";

                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);

                 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                 for (int i = 0; i < stringList.size(); i++) 
                     Pair<String, String> pair = stringList.get(i);
                     nameValuePairs.add(new BasicNameValuePair("Sensors", pair.first));
                     nameValuePairs.add(new BasicNameValuePair("Calibrated", pair.second));
                     httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));  
                     HttpResponse httpResponse = httpClient.execute(httpPost);
                     httpResponse.getEntity().consumeContent();

                 
                      catch (UnsupportedEncodingException e) 
                     
                 // TODO Auto-generated catch block
                 e.printStackTrace(); 
                     catch (ClientProtocolException e) 
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                     catch (IllegalStateException e) 
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                     catch (IOException e) 
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                         
        
    );

还有我的 PHP 文件:

<?php
$con = mysql_connect("localhost","root","1234");
if (!$con)
 
  die('Could not connect: ' . mysql_error());
 

mysql_select_db("eHealthDroid", $con);

$sensors = $_POST['Sensors'];
$calibrated = $_POST['Calibrated'];

$sql = "INSERT INTO mobile_units(sensors,calibrated)values('$sensors', '$calibrated')";
      mysql_query($sql) or die(mysql_error());
mysql_close($con);

?>

现在我有另一个问题...为什么我会根据我在手机上使用 WIFI 还是 3G 得到不同的输出?我应该使用哪一个?

wifi输出:

08-09 12:53:25.178: I/System.out(6926): [socket][0] connection /192.168.1.10:80;LocalPort=46210(0)
08-09 12:53:25.178: I/System.out(6926): [CDS]connect[/192.168.1.10:80] tm:90
08-09 12:53:25.179: D/Posix(6926): [Posix_connect Debug]Process com.pfc.ehealthdroid :80 
08-09 12:53:25.505: I/System.out(6926): [socket][/192.168.1.15:46210]
08-09 12:53:25.505: I/System.out(6926): rx timeout:0
08-09 12:53:25.594: I/System.out(6926): rx timeout:1
08-09 12:53:25.595: I/System.out(6926): [CDS]EAGAIN or EWOULDBLOCK in Recvfrom
08-09 12:53:25.595: I/System.out(6926): [CDS]read is 0
08-09 12:53:25.595: I/System.out(6926): rx timeout:0
08-09 12:53:25.595: I/System.out(6926): rx timeout:0
08-09 12:53:25.624: I/System.out(6926): rx timeout:1
08-09 12:53:25.625: I/System.out(6926): [CDS]EAGAIN or EWOULDBLOCK in Recvfrom
.....

3G 输出:

08-09 12:56:42.024: I/System.out(7313): [socket][1:49104] exception
08-09 12:56:42.025: I/System.out(7313): [CDS]close[49104]
08-09 12:56:42.025: I/System.out(7313): close [socket][/0.0.0.0:49104]
08-09 12:56:42.025: W/System.err(7313): org.apache.http.conn.ConnectTimeoutException: Connect to /192.168.1.10:80 timed out
08-09 12:56:42.026: W/System.err(7313):     at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
08-09 12:56:42.026: W/System.err(7313):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
08-09 12:56:42.026: W/System.err(7313):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
08-09 12:56:42.026: W/System.err(7313):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
08-09 12:56:42.026: W/System.err(7313):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:363)
08-09 12:56:42.026: W/System.err(7313):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
08-09 12:56:42.026: W/System.err(7313):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
08-09 12:56:42.027: W/System.err(7313):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
08-09 12:56:42.027: W/System.err(7313):     at com.pfc.ehealthdroid.MainActivity$1.run(MainActivity.java:362)
08-09 12:56:42.027: W/System.err(7313):     at java.lang.Thread.run(Thread.java:856)
08-09 12:56:42.027: D/dalvikvm(7313): threadid=11: exiting

任何帮助都会很棒!谢谢

【问题讨论】:

“给你带来问题” - 你的意思是其他问题,而不是使用私有地址 (192.168.x.x) 的 NAT 化本地网络显然无法通过 GPRS/3G 访问? 当然,愚蠢的问题,我没想到。知道为什么它不适用于 WI-FI 吗? 顺便说一句,我检查了 http 状态代码 httpResponse.getStatusLine().getStatusCode() 结果是 404...知道发生了什么吗? 根据我读到的内容,404 错误应该是 url 问题,对吧?但关键是我可以访问在手机浏览器中引入url的localhost。奇怪,不是吗? 【参考方案1】:

我是否正确理解 192.168.1.15 是带有 IDE 的 PC-Localhost,并且您想通过在模拟器中运行的 Android 应用程序连接到您?如果是,您必须使用“10.0.2.2”作为 IP 地址。在模拟器中,地址被 IDE 重定向到你的电脑

没有连接到IP的东西你也必须允许你的应用使用互联网连接:

【讨论】:

不!我想从我在移动设备中运行的应用程序访问服务器。我在这些情况下有时会提到模拟器原因,人们建议使用模拟器运行应用程序,看看问题是编程问题还是其他类型的问题。【参考方案2】:

好吧,这很尴尬,但至少我找到了解决方案。

我将 php 文件放在目录 php/www 中,老实说我不知道​​为什么我认为这是正确的目录。我检查了默认目录,发现是 httpdocs 和...瞧!

【讨论】:

以上是关于在 Android 中通过 XAMPP 连接到 MYSQL的主要内容,如果未能解决你的问题,请参考以下文章

将android设备连接到本地服务器xampp

Android 手机无法连接到安装在 VMware 上的 XAMPP 服务器

我们可以在 react native 中通过蓝牙连接到热敏收据打印机吗

使用 XAMPP 将 android 连接到本地服务器

如何在 php 中通过 gmail 使用 mail()

在 Java 中通过 SSH 隧道连接到 Mongo 数据库