【问题标题】:Make sure that the wamp server is online before pull data from mysql database -Android在从 mysql 数据库中提取数据之前确保 wamp 服务器在线 - Android
【发布时间】:2014-02-05 19:53:43
【问题描述】:

在从mysql数据库中获取数据之前,我需要确保wamp服务器在线,如果没有,应用程序告诉用户在拉数据之前先把它在线,这在android中如何实现?好像它是离线的android应用程序停止了!

连接数据库的PHP代码是:

<?php

//receive datatbase Info. from android app
$json=$_SERVER['HTTP_JSON'];
var_dump($data);
$data=json_decode($json);
$dbname=$data->dbname;
$dbpass=$data->dbpass;
$link=mysql_connect("localhost","root",$dbpass);

if (!$link) {
    echo "error"; 
    die(mysql_error());
}

$db_selected=mysql_select_db($dbname,$link);

if (!$db_selected) {
    die ('error'. mysql_error());
}

mysql_query("set names 'utf8'");
mysql_query("set CHARACTER set 'utf8'",$link);
mb_internal_encoding("UTF-8");

?>

但是在 andorid 应用程序中,当没有连接时(我的意思是当 wamp 服务器离线时)它不会收到“错误”?

总而言之,在从数据库中提取数据之前,是否有任何方法可以确保 wamp 服务器在线?如果不给用户消息。

心情疲惫,我尝试了但没有结果,真的任何帮助将不胜感激!

【问题讨论】:

    标签: php android mysql wamp wampserver


    【解决方案1】:

    您的问题可能的解决方案之一是为 wamp 服务器地址创建一个 Http 请求,这可以在 Android 中轻松完成。以下代码向您展示了如何为您需要的任何 URL 创建 http 请求。

    Thread thread = new Thread(new Runnable(){
            @Override
            public void run() {
                try {
                    try {
                        URL url = new URL("http://220.13.81.33");
    
                        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                        urlc.setConnectTimeout(1000 * 5); // mTimeout is in seconds
                        urlc.connect();
    
                        if (urlc.getResponseCode() == 301) {
    
    
                        }
                    } catch (MalformedURLException e1) {
                        e1.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    catch (Exception e)
                    {
    
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    
        thread.start(); 
    

    很明显,你只是把你想要的IP或URL放在URL构造函数中,但是你必须注意两个重要的注意事项:

    1-要发出请求,您需要通过使用线程或创建异步任务来完成,或者,如果您不想使用线程,您可以强制 android 在主进程中处理此类请求android 通过在代码中添加以下策略。但是这种方案需要SDK版本9以上。

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy); 
    

    2-如果您正在使用模拟器并想在本地主机上连接,则必须使用此地址http://10.0.2.2:8080,因为它是 Android 的本地主机地址。

    一旦发出连接函数,将返回响应代码,否则将出现异常。响应代码的解释可以在这个链接中找到 http://en.wikipedia.org/wiki/List_of_HTTP_status_codes,请注意如果返回的响应代码是 301,这意味着使用的将被重定向到给定的 URI,这表明 Wamp 服务器在线。对于出现的异常,很可能 Wamp 服务器处于脱机状态。因此,您需要针对不同的场景进行多次测试并查看输出。

    我希望你一切顺利。

    【讨论】:

      【解决方案2】:

      我在another question 中回答了这个问题,但这也可能是这个问题的答案。基本上,我的解决方案是基于将 Socket 设置为您的 wamp 服务器 80 端口。

      我在许多项目中使用以下代码:

      Socket socket;
      
      // Adjust it to your case, it might be a public IP too
      final String host = "192.168.1.X";
      final int port = 80;
      final int timeout = 30000;   // 30 seconds of timeout
      
      try {
        socket = new Socket();
        socket.connect(new InetSocketAddress(host, port), timeout);
      }
      catch (UnknownHostException uhe) {
        Log.e("WampSock", "I couldn't resolve the host you've provided!");
      }
      catch (SocketTimeoutException ste) {
        Log.e("WampSock", "After a reasonable amount of time, I'm not able to connect, your WAMP server is probably down!");
      }
      catch (IOException ioe) {
        Log.e("WampSock", "Hmmm... Sudden disconnection, probably you should retry once again!");
      } 
      

      【讨论】:

      • 真的很感谢,但是我的问题通过上面接受的答案解决了,我使用异步任务检查返回的响应代码 403(禁止)是否为 503(服务不可用),这表明 wamp 服务器处于离线状态! ...否则wamp服务器在线..
      【解决方案3】:

      这不会简单很多吗?

      <?php
          $link = @mysql_connect('127.0.0.1','a_userid','a_password');
          $err = mysql_errno();
          switch ($err) {
              case 2002 :
                  echo 'Error Start MySQL Please';
                  exit;
              case xxxx : // any other possible errors    
                   ...
      
          }
          // MySQL is there so proceed as normal
      

      【讨论】:

      • 真的很感谢,但是我的问题通过上面接受的答案解决了,我使用异步任务检查返回的响应代码 403(禁止)是否为 503(服务不可用),这表明 wamp 服务器处于离线状态! ...否则wamp服务器在线..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      相关资源
      最近更新 更多