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

时间:2015-03-31 17:05:10

标签: php android mysql crud

我正在编写一个适用于MySQL数据库的Android应用程序。该数据库中有一个表格可以记录一些结果。

我的应用可以与该表进行通信,并使用PHP执行CRUD操作(createdeletereadupdate)。

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

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

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

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$12.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)

1 个答案:

答案 0 :(得分:0)

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

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