【问题标题】:Standalone PC application connecting to Android sqllitedatabase连接到 Android sqlite 数据库的独立 PC 应用程序
【发布时间】:2016-10-30 07:19:22
【问题描述】:

我在一个项目中工作,到目前为止我有一个 android 应用程序,带有一个 sqlite db,一个 web 服务器在我的 android 中运行,一个 php 应用程序也在我的设备中。

所以,我的问题是......我的 PHP 应用程序可以使用任何 PC 网络浏览器访问,因为有一个内部网络服务器 (lighttp)。

但是,我的客户说我们不想使用这种方法,而是希望拥有一个能够连接到我的设备、读取数据库并生成报告的独立应用程序。

我是一个非常过时的家伙.. 你们建议实施什么?我可以用java编写软件并生成报告,但我不知道如何连接到设备数据库。

设备使用的IP可用于连接(ping没有问题)。

你们推荐什么?

【问题讨论】:

    标签: java php android report


    【解决方案1】:

    好吧,鉴于您的客户不想使用预先构建的网络服务器,您可以使用 php 创建一个服务器来处理您的 android 应用程序的请求。

    PHP 提供对安全 TLS 套接字连接的支持。

    这是来自网站的示例服务器代码。 如果您还没有安装 php7,我建议您安装它,并且我不确定您是否可以在没有它的情况下运行服务器代码。

    #!/usr/local/bin/php -q
    <?php
    error_reporting(E_ALL);
    
    /* Allow the script to hang around waiting for connections. */
    set_time_limit(0);
    
    /* Turn on implicit output flushing so we see what we're getting
     * as it comes in. */
    ob_implicit_flush();
    
    $address = '192.168.1.53'; // Your IP
    $port = 10000; // Your Port
    
    if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo "socket_create() failed: reason: " . 
    socket_strerror(socket_last_error()) . "\n";
    }
    
    if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() failed: reason: " . 
    socket_strerror(socket_last_error($sock)) . "\n";
    }
    
    if (socket_listen($sock, 5) === false) {
    echo "socket_listen() failed: reason: " . 
    socket_strerror(socket_last_error($sock)) . "\n";
    }
    
    do {
    if (($msgsock = socket_accept($sock)) === false) {
        echo "socket_accept() failed: reason: " . 
    socket_strerror(socket_last_error($sock)) . "\n";
        break;
    }
    /* Send instructions. */
    $msg = "\nWelcome to the PHP Test Server. \n" .
        "To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
    socket_write($msgsock, $msg, strlen($msg));
    
     do {
         if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
             echo "socket_read() failed: reason:" .                             
             socket_strerror(socket_last_error($msgsock)) . "\n";
             break 2;
        }
        if (!$buf = trim($buf)) {
            continue;
        }
        if ($buf == 'quit') {
            break;
        }
        if ($buf == 'shutdown') {
            socket_close($msgsock);
            break 2;
        }
        $talkback = "PHP: You said '$buf'.\n";
        socket_write($msgsock, $talkback, strlen($talkback));
        echo "$buf\n";
    } while (true);
    socket_close($msgsock);
    } while (true);
    socket_close($sock);
    ?>
    

    链接到 PHP 套接字示例:http://php.net/manual/en/sockets.examples.php

    您还可以使用本文中的答案将您的 android 设备连接到正在运行的 php 服务器。

    不要忘记打开您在系统防火墙中选择的端口!如果您希望路由器可公开连接,请在路由器中使用,但请注意连接到您网络的不速之客!

    how to create Socket connection in Android?

    【讨论】:

    • 非常感谢您的回复......问题是......我的客户根本不需要网络服务器......他只想要一个安装问题,一旦安装就运行。所以,没有网络服务器,没有 DNS 服务器......只是一个纯粹的独立应用程序。
    • @user1657666 lighttp 服务器是您想要完成的任务所必需的吗?考虑到您没有连接到任何外部源,您应该在没有任何服务器的情况下完成所有流程客户端。我会写另一个你可能更喜欢的答案。
    • lighttp 是安装在设备中的我的 php 的网络服务器。然而,我的客户非常愚蠢,他不喜欢它。他想要一个基于 PC 的传统应用程序,使用 C#、VB.NET、Java 或其他语言。我试图了解如何直接连接到设备中的数据库.
    【解决方案2】:

    可以使用 Android SDK 中内置的 SQLiteOpenHelper 和 SQLiteDatabase 类来读取和写入 Android 设备中的内部数据库。

    请参阅 Android 文档:https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

    这是一个非常有用的教程,用于在您的设备中读取和写入 sqlite 数据库。本教程使用我上面提到的类。这应该足以让您在不使用 lighttp 服务器或 php 代码的情况下开始操作客户端数据:http://www.vogella.com/tutorials/AndroidSQLite/article.html#tutorial-using-sqlite

    这是另一篇可能有用的相关帖子。

    Reading data from Sqlite Database in android application.

    【讨论】:

    • 感谢您的回答,但我们的想法是在 PC 上安装一个能够从 android 设备读取数据库的应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多