【问题标题】:android device xampp no return?android设备xampp没有返回?
【发布时间】:2013-05-28 11:41:08
【问题描述】:

我有一个非常非常简单的应用程序。我已经使用 xampp 进行了设置。当我尝试将用户登录到本地主机时,根本没有任何反应。没有错误,没有 logcat,什么都没有……很奇怪。我已经测试了 XAMPP,它将 php 页面加载到我的浏览器中,运行等。XAMPP 绝对是我的本地主机。我已经在一个实际的 URL 上测试了 java 类,它可以工作。这是代码:

connect.php

<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'test';
$conn_error = 'Not Connected!';

if (!mysql_connect($host, $user, $pass) || !mysql_select_db($db)) {
    die ($conn_error);
} 
?>

test.php

<?php
require_once 'connect.php';

$username = $_POST['username'];
$password = $_POST['password']; 
$query_search = "SELECT * FROM members WHERE username = '".$username."' AND password = '".$password. "'"; 
$query_exec = mysql_query($query_search) or die(mysql_error());
$rows = mysql_num_rows($query_exec);

if($rows == 1) {
     echo "1"; 
} else {
    echo "Username/Password is invalid"; 
}
?>

login.java

class LogMeIn extends AsyncTask<String, Void, String> {
    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://localhost/test.php");

    protected String doInBackground(String... urls) {

        try {
            username = un.getText().toString();
            password = pw.getText().toString();
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                    2);
            nameValuePairs
                    .add(new BasicNameValuePair("username", username));
            nameValuePairs
                    .add(new BasicNameValuePair("password", password));
            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse response = client.execute(post);
            String res = inputStream(response.getEntity().getContent())
                    .toString();
            Log.v("RESPONSE", res);

            // if username and password are valid, launch main activity
            if (res.toString() == "1") {
                Intent logIn = new Intent(getApplicationContext(),
                        Main.class);
                startActivity(logIn);
            }

我认为这是我的帖子网址。 localhost/test.php。但是我尝试了以下

  • localhost/test.php
  • 10.0.0.2/test.php
  • 192.168.x.x/test.php
  • 127.0.0.1/test.php

它们都不起作用。可能是一个非常简单的解决方案,几乎可以肯定是一个重复的问题,但我一生都无法弄清楚这一点。

编辑

我将 localhost 更改为 http://192.168.x.x/test.php,起初什么也没有……最后我在 logcat 中收到警告,就像捕获的异常一样。它说

05-27 23:38:42.510: W/System.err(13310): org.apache.http.conn.HttpHostConnectException: Connection to http://192.68.x.x refused
05-27 23:38:42.510: W/System.err(13310):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
05-27 23:38:42.510: W/System.err(13310):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
05-27 23:38:42.510: W/System.err(13310):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
05-27 23:38:42.510: W/System.err(13310):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
05-27 23:38:42.520: W/System.err(13310):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-27 23:38:42.520: W/System.err(13310):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-27 23:38:42.520: W/System.err(13310):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-27 23:38:42.520: W/System.err(13310):    at com.facilitysolutionsinc.trackflex.Log_In$LogMeIn.doInBackground(Log_In.java:83)
05-27 23:38:42.520: W/System.err(13310):    at com.facilitysolutionsinc.trackflex.Log_In$LogMeIn.doInBackground(Log_In.java:1)
05-27 23:38:42.520: W/System.err(13310):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-27 23:38:42.520: W/System.err(13310):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-27 23:38:42.520: W/System.err(13310):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-27 23:38:42.520: W/System.err(13310):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-27 23:38:42.520: W/System.err(13310):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-27 23:38:42.520: W/System.err(13310):    at java.lang.Thread.run(Thread.java:856)
05-27 23:38:42.520: W/System.err(13310): Caused by: java.net.ConnectException: failed to connect to /192.68.x.x (port 80): connect failed: ETIMEDOUT (Connection timed out)
05-27 23:38:42.530: W/System.err(13310):    at libcore.io.IoBridge.connect(IoBridge.java:114)
05-27 23:38:42.530: W/System.err(13310):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
05-27 23:38:42.530: W/System.err(13310):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
05-27 23:38:42.530: W/System.err(13310):    at java.net.Socket.connect(Socket.java:842)
05-27 23:38:42.530: W/System.err(13310):    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
05-27 23:38:42.530: W/System.err(13310):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
05-27 23:38:42.530: W/System.err(13310):    ... 14 more
05-27 23:38:42.530: W/System.err(13310): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
05-27 23:38:42.540: W/System.err(13310):    at libcore.io.Posix.connect(Native Method)
05-27 23:38:42.540: W/System.err(13310):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
05-27 23:38:42.540: W/System.err(13310):    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
05-27 23:38:42.540: W/System.err(13310):    at libcore.io.IoBridge.connect(IoBridge.java:112)
05-27 23:38:42.540: W/System.err(13310):    ... 19 more

【问题讨论】:

  • 在模拟器浏览器上尝试相同的链接,我认为它也应该需要互联网许可。
  • @Naveen 模拟器浏览器那是什么?你需要澄清。我的清单中还声明了互联网许可
  • 正如 Willem Ellis 的回答所说,您现在需要使用系统 IP 地址。只是为了测试 url 是否有效,您可以在设备上的任何浏览器中打开相同的 url。同样在您的代码中获取响应字符串,您可以使用String result = EntityUtils.toString(response.getEntity());

标签: php android


【解决方案1】:

你是用模拟器还是你的实际设备测试它?

如果设备: 将其指向 localhost 将使 android 设备认为它位于本地服务器上。 127.0.0.1 也是如此。如果设备与 XAMPP 服务器连接到同一网络,则必须将其指向服务器的内部 IP。如果未连接,则必须允许外部连接到达该计算机,然后指向外部 IP。

10.0.2.2 仅在您在模拟器上测试应用时才有效。你可以阅读更多关于它的信息here

【讨论】:

  • 好的,所以如果您在运行 Windows 的机器上运行 XAMPP 服务器,请打开命令行并输入 ipconfig 并查看其内部 IP 地址是什么。使用它作为 URL,我看不出它不应该连接的原因。
  • 好的,那肯定是正确的 IP 地址。因此,如果这不能解决问题,至少您现在知道还有其他问题!
  • 您似乎输入了错误的 IP 地址。 Connection to http://192.68.x.x refused。应该是 192.168.x.x
  • 不知道,但应该是 168。您的错误日志表明您已将 IP 地址指定为 192。68 .x.x
  • 爱你,就是这样!我今天已经编码太久了,我的眼睛对我不利。谢谢!
【解决方案2】:

我想说说我的分析:D

我认为你的问题在于这段代码:

String res = inputStream(response.getEntity().getContent()).toString();

因为你不能直接用.toString()方法把一个输入流变成一个String。

要将 inputStream 转换为字符串,这里有一点 sn-p :

public static String responseToString(HttpResponse response){
            String result = "";
            try{
                InputStream in = response.getEntity().getContent();
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                StringBuilder str = new StringBuilder();
                String line = null;
                while((line = reader.readLine()) != null){
                    str.append(line + "\n");
                }
                in.close();
                result = str.toString();
            }catch(Exception ex){
                result = "Error";
            }
            return result;
        }

然后将HttpResponse response = client.execute(post);下面的代码修改为:

 HttpResponse response = client.execute(post);
 String res = responseToString(response); // add .trim().replace("\n", "") if you have newlines

希望对您有所帮助,祝您好运!! ^^

【讨论】:

    猜你喜欢
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2013-04-16
    • 2013-05-30
    相关资源
    最近更新 更多