0

I am working in a project and so far I have an android application, with a sqlite db, with a webserver running in my android and a php application also in my device.

So, my problem is.. My PHP application is reachable using any PC web browser because there is an internal webserver (lighttp).

However, my client said we do not want to use this approach and prefer to have a standalone application that is able to connect to my device, read the database and generate the reports.

I am very outdated guy.. what do you guys recommend to implement it ? I could write the software in java and generate the report but I am not sure how to connect to the device database.

The IP used by the device is available for connection (ping works without problems).

What you guys recommend ?

user1657666
  • 351
  • 2
  • 9

2 Answers2

0

Well, seeing as your client does not want to use a pre-built webserver you could create a server with php to handle the requests of your android app.

PHP offers support for secure TLS Socket connections.

This is the example server code from the website. I recommend installing php7 if you don't already have it installed, and I'm not sure that you can run the server code without it.

#!/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);
?>

Link to PHP Socket Example: http://php.net/manual/en/sockets.examples.php

You can also use the answers in this post to get your android device connected to your running php server.

Don't forget to open your port that you choose in your system firewall! And in your router if you want it to be publicly connectable, but beware of uninvited guests connecting to your network!

how to create Socket connection in Android?

Community
  • 1
  • 1
Devin Carpenter
  • 907
  • 8
  • 21
  • many thanks for your response... the problem is.. my client does not want webserver at all.. he just want an installation problem that runs as soon it is installed. So, no webserver, no DNS servers... just a pure standalone app. – user1657666 Oct 30 '16 at 08:07
  • @user1657666 Is the lighttp server necessary for what you are trying to accomplish? Considering you are not connecting to any external source, you should be doing all of your process client-side without any server. I'll write another answer that you might like better. – Devin Carpenter Oct 30 '16 at 08:33
  • the lighttp is the webserver for my php that is installed in the device. However, my client is very dumb and he does not like it.. he wants an traditional PC based app in C#, VB.NET, Java, or whatever.. I am trying to understand how to connect directly to the database in the device. – user1657666 Oct 30 '16 at 08:37
0

Reading and writing to the internal database in your Android device can be achieved with the SQLiteOpenHelper and SQLiteDatabase classes that are built into the Android SDK.

See Android Documentation: https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

Here's an extremely helpful tutorial for reading and writing to the sqlite database in your device. The tutorial uses the classes that I have mentioned above. This should be enough to get you started in manipulating your clients data without the use of the lighttp server or php code: http://www.vogella.com/tutorials/AndroidSQLite/article.html#tutorial-using-sqlite

Here is another related post that may prove helpful.

Reading data from Sqlite Database in android application.

Community
  • 1
  • 1
Devin Carpenter
  • 907
  • 8
  • 21
  • Thanks for your answer, but the idea is to have an application installed in a PC that is able to read the db from the android device. – user1657666 Oct 30 '16 at 18:41