我正在编写一个适用于MySQL数据库的Android应用程序。该数据库中有一个表格可以记录一些结果。
我的应用可以与该表进行通信,并使用PHP执行CRUD
操作(create
,delete
,read
和update
)。
但是我现在想要的是以编程方式在该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)
答案 0 :(得分:0)
问题在于您的Android代码。 事实上,Android强制您在与主线程不同的线程中运行所有网络代码。例如,尝试将代码(调用服务器的代码)移动到AsyncTask。
编辑: 这是你的确切问题: How to fix android.os.NetworkOnMainThreadException?