Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Socket在两个Android设备之间传输sqlite3数据库?_Android_Sockets_Sqlite_Android Wifi_Data Transfer - Fatal编程技术网

如何使用Socket在两个Android设备之间传输sqlite3数据库?

如何使用Socket在两个Android设备之间传输sqlite3数据库?,android,sockets,sqlite,android-wifi,data-transfer,Android,Sockets,Sqlite,Android Wifi,Data Transfer,我读过这篇文章,这篇文章。我有两个真正的安卓设备,不是AVD,我的 目的是在一个设备中设置IP地址和端口,该设备充当客户端,而另一个充当服务器 他们正在使用WIFI,我已经将他们分别连接到PC。进入adb外壳,并相互ping。它工作正常。 我编写了如下客户机代码: Socket socket = new Socket("192.168.1.142",8888); InputStream in = socket.getInputStream(); byt

我读过这篇文章,这篇文章。我有两个真正的安卓设备,不是AVD,我的 目的是在一个设备中设置IP地址和端口,该设备充当客户端,而另一个充当服务器

他们正在使用WIFI,我已经将他们分别连接到PC。进入adb外壳,并相互ping。它工作正常。 我编写了如下客户机代码:

    Socket socket = new Socket("192.168.1.142",8888);

        InputStream in = socket.getInputStream();

        byte[] buffer = new byte[in.available()];

        Toast.makeText(this, String.valueOf(in.available()), Toast.LENGTH_LONG).show();

        in.read(buffer);

        String msg = new String(buffer);

        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
和服务器:

ServerSocket server = new ServerSocket(8888);
        while(true) {
            Socket client = server.accept();

            OutputStream out = client.getOutputStream();

            String msg = "Hello Android!";

            out.write(msg.getBytes());

            client.close();
        }
我必须补充这一点

以显示

但没有回应。我有两个问题:

1.为什么我的客户没有回应

2.如何处理sqlite3数据库,与普通文本文件肯定有什么不同,但有什么区别


任何建议都将不胜感激。

在不同品牌/型号/制造商/等的设备之间传输sqlite3.db是不明智的。相反,您应该将数据库的架构和内容转储到csv或sql并传输。在传输之前,您可能也想压缩文件


至于与Android的联网。如果您使用的是AVD(仿真器),那么您将发现它不可能或几乎不可能。您的代理在网络中也扮演着一个角色,因此您需要对它允许的内容、当前的配置以及它的行为(bug、怪癖、特性)保持警惕。你应该使用wireshark之类的工具来检查网络通信,并确保你的应用程序甚至在发送某个信息之前就开始担心是否收到了该信息。

在可能不同制造商/型号/制造商/等的设备之间传输sqlite3.db是不明智的,您应该将数据库的模式和内容转储到csv或sql,并将其传输。在传输之前,您可能也想压缩文件


至于与Android的联网。如果您使用的是AVD(仿真器),那么您将发现它不可能或几乎不可能。您的代理在网络中也扮演着一个角色,因此您需要对它允许的内容、当前的配置以及它的行为(bug、怪癖、特性)保持警惕。你应该使用wireshark之类的工具来检查网络通信,并确保你的应用程序甚至在发送某些信息之前,才担心是否收到这些信息。

你的建议非常有用。先转储,然后传输。但我在项目中转储sqlite3数据库时遇到了很多麻烦。因为我想在中执行命令我的程序,不在adb shell中手动运行。我不想为获得权限而根目录我的设备。现在的问题是如何在我的应用程序中获得根目录权限。根目录解决问题=非常糟糕的解决方案。如果发送方的代码库知道该模式,则使用该知识将该模式传达给接收方。db的内容可以通过SELECT查询提取。如果收件人没有已经知道架构的代码,那么列名就不会那么重要,您可以简单地依靠列索引来引用列。事实上,我遇到了一个错误的方向。我认为传输整个sqlite3数据库会更容易。而且我甚至没有考虑另一端需要什么信息。所以,我得多考虑一下。非常感谢。你的建议非常有用。先转储然后传输。但是我在项目中转储sqlite3数据库时遇到了很多麻烦。因为我想在程序中执行命令,不是手动在adb外壳中。我不想为获得权限而对我的设备进行根操作。现在的问题是如何在我的应用程序中获得根权限。根操作解决问题=非常糟糕的解决方案。如果发送方的代码库知道该模式,则使用该知识将该模式传达给接收方。db的内容可以通过SELECT查询提取。如果收件人没有已经知道架构的代码,那么列名就不会那么重要,您可以简单地依靠列索引来引用列。事实上,我遇到了一个错误的方向。我认为传输整个sqlite3 db会更容易。我甚至没有考虑另一端需要什么信息。所以,我必须考虑更多。非常感谢。