通过 php 连接到 MySQL 以创建新的 table 时出错

Error when connecting to MySQL through php to create a new table

我正在编写一个与 MySQL 数据库一起工作的 Android 应用程序。该数据库中有一个 table 来记录一些结果。

我的应用能够与 table 通信并执行 CRUD 操作(createdeletereadupdate ) 使用 PHP.

但是我现在想要的是以编程方式在该数据库中创建新的 table。我手动使用并测试了以下 PHP 代码,它工作正常,但在从我的应用发出请求时出现错误。

以下是代码片段和错误消息。非常感谢和欢迎回答或讨论。

这是我发送创建 table 请求的地方:

table_name = "Background_Apps_Test";
            params.add(new BasicNameValuePair("table_name", table_name));
            json = jsonParser.makeHttpRequest(Config.FILE_UPLOAD_URL+"create_table.php", "POST", params);

这是我请求创建的 php 文件:

<?php

if (isset($_POST['table_name']){

$table_name = $_POST['table_name'];

require_once __DIR__ . '/db_connect.php';

$db = new DB_CONNECT();

$query = "
CREATE TABLE $table_name (
    pid int(11) primary key auto_increment,
    l_type varchar(100) not null,
    l_info varchar(5000) not null,
    l_ip varchar(15),
    created_at timestamp default now()
)";
}
?>

这是错误信息:

E/AndroidRuntime﹕ FATAL EXCEPTION: main
android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1128)
        at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
        at libcore.io.IoBridge.connectErrno(IoBridge.java:159)
        at libcore.io.IoBridge.connect(IoBridge.java:112)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
        at java.net.Socket.connect(Socket.java:857)
        at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
        at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
        at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
        at mtb.saeed.com.mytestingbenchmark.JSONParser.makeHttpRequest(JSONParser.java:52)
        at mtb.saeed.com.mytestingbenchmark.XmlFileCreator.Automate(XmlFileCreator.java:400)
        at mtb.saeed.com.mytestingbenchmark.XmlFileCreator.onClick(XmlFileCreator.java:260)
        at android.view.View.performClick(View.java:4211)
        at android.view.View$PerformClick.run(View.java:17446)
        at android.os.Handler.handleCallback(Handler.java:725)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:153)
        at android.app.ActivityThread.main(ActivityThread.java:5299)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
        at dalvik.system.NativeStart.main(Native Method)

问题出在您的 Android 代码上。 事实上,Android 强制您 运行 在与主线程不同的线程中执行所有网络代码。例如,尝试将您的代码(调用服务器的代码)移动到 AsyncTask。

已编辑: 这是您的确切问题: How to fix android.os.NetworkOnMainThreadException?