我正在一个项目工作,到目前为止,我有一个Android应用程序,一个sqlite数据库,一个在我的android中运行的web服务器和一个php应用程序也在我的设备中。
所以,我的问题是..我的PHP应用程序可以通过任何PC网络浏览器访问,因为有一个内部网络服务器(lighttp)。
但是,我的客户说我们不想使用这种方法,而是希望拥有一个能够连接到我的设备,读取数据库并生成报告的独立应用程序。
我是一个非常过时的家伙..你们有什么建议实施它?我可以用java编写软件并生成报告,但我不知道如何连接到设备数据库。
设备使用的IP可用于连接(ping可以正常工作)。
你们推荐什么?
答案 0 :(得分:0)
好吧,看到您的客户端不想使用预先构建的网络服务器,您可以创建一个带有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服务器。
不要忘记打开您在系统防火墙中选择的端口!在您的路由器中,如果您希望它可以公开连接,但要注意连接到您网络的不速之客!
答案 1 :(得分:0)
使用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
这是另一篇可能有用的相关文章。