Reputation: 11
I'm a noob at Java & PHP, I don't understand how this doesn't work. What I want to do is when I press a button in my Android app I want this PHP script to be executed:
<?php
mysql_connect("x","x","x"); // host, username, password...
mysql_select_db("x"); // db name...
$id=$_GET["id"];
$status=$_GET["status"];
mysql_query("UPDATE list SET status = $status WHERE id = $id");
mysql_close();
?>
and this is what is supposed to trigger it:
public void insertDataToDB(int id, int status) {
try {
HttpGet httpget = new HttpGet("http://10.0.2.2/SetStatus.php?id=" + id + "&status=" + status);
Log.d("link", "http://10.0.2.2/SetStatus.php?id=" + id + "&status=" + status);
httpclient.execute(httpget);
} catch (Exception e) {
Log.e("insertDataToDB", "ERROR : " + e.getMessage());
}
}
This is my error message:
23:40:51.270: insertDataToDB(1914): ERROR : null
I've tried using both HttpGet and HttpPost as well as _GET and _POST in the php script, but nothing seems to work so I just stuck with _GET as the script works when i write the link into my browser. I need help, thanks in advance! :)
(it does not make any difference if i cast id & status to strings nor if i set them to constant values.)
UPDATE
Error log:
11-15 00:05:57.700: E/insertDataToDB(2080): android.os.NetworkOnMainThreadException
11-15 00:05:57.700: E/insertDataToDB(2080): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
11-15 00:05:57.700: E/insertDataToDB(2080): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
11-15 00:05:57.700: E/insertDataToDB(2080): at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
11-15 00:05:57.700: E/insertDataToDB(2080): at libcore.io.IoBridge.connect(IoBridge.java:122)
11-15 00:05:57.700: E/insertDataToDB(2080): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
11-15 00:05:57.700: E/insertDataToDB(2080): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
11-15 00:05:57.700: E/insertDataToDB(2080): at java.net.Socket.connect(Socket.java:882)
11-15 00:05:57.700: E/insertDataToDB(2080): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
11-15 00:05:57.700: E/insertDataToDB(2080): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
11-15 00:05:57.700: E/insertDataToDB(2080): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
11-15 00:05:57.700: E/insertDataToDB(2080): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11-15 00:05:57.700: E/insertDataToDB(2080): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
11-15 00:05:57.700: E/insertDataToDB(2080): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
11-15 00:05:57.700: E/insertDataToDB(2080): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-15 00:05:57.700: E/insertDataToDB(2080): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
11-15 00:05:57.700: E/insertDataToDB(2080): at com.example.fibergruppenlista.DataBase.insertDataToDB(DataBase.java:34)
11-15 00:05:57.700: E/insertDataToDB(2080): at com.example.fibergruppenlista.ListClickListener$2.onClick(ListClickListener.java:47)
11-15 00:05:57.700: E/insertDataToDB(2080): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:160)
11-15 00:05:57.700: E/insertDataToDB(2080): at android.os.Handler.dispatchMessage(Handler.java:102)
11-15 00:05:57.700: E/insertDataToDB(2080): at android.os.Looper.loop(Looper.java:135)
11-15 00:05:57.700: E/insertDataToDB(2080): at android.app.ActivityThread.main(ActivityThread.java:5221)
11-15 00:05:57.700: E/insertDataToDB(2080): at java.lang.reflect.Method.invoke(Native Method)
11-15 00:05:57.700: E/insertDataToDB(2080): at java.lang.reflect.Method.invoke(Method.java:372)
11-15 00:05:57.700: E/insertDataToDB(2080): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
11-15 00:05:57.700: E/insertDataToDB(2080): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
I tried using an asynctask<void, void, void>
but I can't get it to work, the insertDataToDB
method is by the way not located inside of the MainActivity.java class.
Upvotes: 0
Views: 299
Reputation: 682
This is not related to Java or PHP. On Android, you cannot perform network operations in the main thread (the UI thread). I suggest you to run your code in an AsyncTask
for instance. See this answer with an example code.
Look at the official Android NetworkOnMainThreadException documentation and at this guide to keep your app responsive.
Upvotes: 1