-1

I'm trying to pass a JSON data object to a webservice in my Android Application. I've a button and when i click on it I want to send the location to my webservice. Everything works fine untill the last command. I've got my code from another post here : How to post data to a Webservice using JSON?

It should be work so I think the problem is somewhere else but the error says nothing to me.. this is my function that runs on onclick:

public void clickbuttonRecieve(View v) {
         new MyAsync().execute();
 }


 private class MyAsync extends AsyncTask<Void, Void, Void> {
        protected Void doInBackground(Void... tmps) {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(
                    "http://bomatec.be/webservice2.php");

            httpPost.setHeader("content-type", "application/json");
            JSONObject data = new JSONObject();
            try {
                String message;

                data.put("user", "12");
                data.put("lat", "50.8");
                data.put("lng", "4.3");


            }catch (JSONException e) {
                Log.e("MYAPP", "unexpected JSON exception", e);
            }

            try {
                StringEntity entity = new StringEntity(data.toString(), HTTP.UTF_8);
                httpPost.setEntity(entity);
            }catch(java.io.UnsupportedEncodingException e){
                Log.e("MYAPP", "UnsupportedEncodingException JSON exception", e);
            }


            try {
                HttpResponse response = httpClient.execute(httpPost);
            }catch (IOException e){
                Log.e("MYAPP", "IOException", e);
            }
            return null;
        }
    }

Error stack :

 java.lang.RuntimeException: An error occured while executing doInBackground()
                                                                                                    at android.os.AsyncTask$3.done(AsyncTask.java:299)
                                                                                                    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
                                                                                                    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
                                                                                                    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
                                                                                                    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
                                                                                                    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
                                                                                                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
                                                                                                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
                                                                                                    at java.lang.Thread.run(Thread.java:856)
                                                                                                 Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
                                                                                                    at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
                                                                                                    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
                                                                                                    at java.net.InetAddress.getAllByName(InetAddress.java:214)
                                                                                                    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
                                                                                                    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:360)
                                                                                                    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 com.example.stevengerrits.bomatec_gerrits_steven.MainActivity$MyAsync.doInBackground(MainActivity.java:177)
                                                                                                    at com.example.stevengerrits.bomatec_gerrits_steven.MainActivity$MyAsync.doInBackground(MainActivity.java:148)
                                                                                                    at android.os.AsyncTask$2.call(AsyncTask.java:287)
                                                                                                    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
                                                                                                    at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
                                                                                                    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
                                                                                                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
                                                                                                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
                                                                                                    at java.lang.Thread.run(Thread.java:856) 
                                                                                                 Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
                                                                                                    at libcore.io.Posix.getaddrinfo(Native Method)
                                                                                                    at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
                                                                                                    at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
                                                                                                    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
                                                                                                    at java.net.InetAddress.getAllByName(InetAddress.java:214) 
                                                                                                    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
                                                                                                    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:360) 
                                                                                                    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 com.example.stevengerrits.bomatec_gerrits_steven.MainActivity$MyAsync.doInBackground(MainActivity.java:177) 
                                                                                                    at com.example.stevengerrits.bomatec_gerrits_steven.MainActivity$MyAsync.doInBackground(MainActivity.java:148) 
                                                                                                    at android.os.AsyncTask$2.call(AsyncTask.java:287) 
                                                                                                    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
                                                                                                    at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
                                                                                                    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
                                                                                                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
                                                                                                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
                                                                                                    at java.lang.Thread.run(Thread.java:856) 
                                                                                                 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
                                                                                                    at libcore.io.Posix.getaddrinfo(Native Method) 
                                                                                                    at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55) 
                                                                                                    at java.net.InetAddress.lookupHostByName(InetAddress.java:405) 
                                                                                                    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
                                                                                                    at java.net.InetAddress.getAllByName(InetAddress.java:214) 
                                                                                                    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
                                                                                                    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:360) 
                                                                                                    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 com.example.stevengerrits.bomatec_gerrits_steven.MainActivity$MyAsync.doInBackground(MainActivity.java:177) 
                                                                                                    at com.example.stevengerrits.bomatec_gerrits_steven.MainActivity$MyAsync.doInBackground(MainActivity.java:148) 
                                                                                                    at android.os.AsyncTask$2.call(AsyncTask.java:287) 
                                                                                                    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
                                                                                                    at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
                                                                                                    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
                                                                                                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
                                                                                                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
                                                                                                    at java.lang.Thread.run(Thread.java:856) 
Community
  • 1
  • 1
user5488652
  • 421
  • 3
  • 8
  • 15

1 Answers1

0

You have NetworkOnMainThreadException exception, you must put your onClick code into AsyncTask. Android prohibits network operations on UI thread, this is to prevent blocking main UI message queue.

Example code is:

 private class MyAsync extends AsyncTask<Void, Void, Void> {
     protected Void doInBackground(Void... tmps) {
         // do your work here!!
         return null;
     }
 }

in your onclick - execute: new MyAsync().execute()

marcinj
  • 48,511
  • 9
  • 79
  • 100