fralexxelarf
fralexxelarf

Reputation: 11

Can't invoke URL on Android

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

Answers (1)

metch
metch

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

Related Questions