android - Error in http connectionandroid.os.NetworkOnMainThreadException -
this question has answer here:
- networkonmainthreadexception 4 answers
- how fix android.os.networkonmainthreadexception? 44 answers
when launched application have problem emulator 4.1 , 4.2 have made the internet permission, logcat shows mssage: error in http connectionandroid.os.networkonmainthreadexception ?
package com.example.eagletracking; import java.io.inputstream; import java.text.simpledateformat; import java.util.arraylist; import java.util.calendar; import org.apache.http.httpentity; import org.apache.http.httpresponse; import org.apache.http.namevaluepair; import org.apache.http.client.httpclient; import org.apache.http.client.entity.urlencodedformentity; import org.apache.http.client.methods.httppost; import org.apache.http.impl.client.defaulthttpclient; import org.apache.http.message.basicnamevaluepair; import android.app.activity; import android.app.alertdialog; import android.content.context; import android.content.dialoginterface; import android.content.intent; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.location.location; import android.location.locationlistener; import android.location.locationmanager; import android.media.audiofx.bassboost.settings; import android.net.connectivitymanager; import android.net.networkinfo; import android.os.bundle; import android.os.handler; import android.util.log; import android.widget.toast; public class gpstrackingactivity extends activity implements locationlistener { toast toast; boolean isgpsavaible; private locationmanager lm; private location location; private static string key =dbconection.key; calendar currentdate; simpledateformat formatter; public static double latitude; // latitude public static double longitude; // longitude handler handler = new handler() { public void handlemessage(android.os.message msg) { if (msg.what == 0) { synchronisation(); } else if (msg.what == 1) { updatedatabase(location); } } }; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.accueil); if (isinternetavailable(this)) { thread th = new thread() { public void run() { try { while (true) { thread.sleep(80000); { handler.sendemptymessage(0); } } } catch (exception e) { e.printstacktrace(); } } }; th.start(); } } public static boolean isinternetavailable(context context) { boolean isinternetavailable = false; try { connectivitymanager connectivitymanager = (connectivitymanager) context .getsystemservice(context.connectivity_service); networkinfo networkinfo = connectivitymanager .getactivenetworkinfo(); if (networkinfo != null && (networkinfo.isconnected())) { isinternetavailable = true; } } catch (exception exception) { // nothing } return isinternetavailable; } @override protected void onresume() { super.onresume(); try { lm = (locationmanager) getsystemservice(location_service); isgpsavaible = lm.isproviderenabled (locationmanager.gps_provider); if (isgpsavaible) { abonnementgps(); } } catch (exception e) { e.printstacktrace(); } } private void abonnementgps() { lm.requestlocationupdates(locationmanager.gps_provider, 10000, 0, this); if (lm != null) { location = lm .getlastknownlocation(locationmanager.gps_provider); thread th = new thread() { public void run() { try { while (location != null) { thread.sleep(6000); { handler.sendemptymessage(1); } } } catch (exception e) { e.printstacktrace(); } } }; th.start(); } } private void synchronisation() { dbconection mabasesqlite = new dbconection(gpstrackingactivity.this); sqlitedatabase db = mabasesqlite.getreadabledatabase(); cursor c = mabasesqlite.getallrows(); int col = c.getcount(); // col=0 pas de enregistrement qui // verifie la condition if (col == 0) { toast.maketext(gpstrackingactivity.this, "pas de donnees ", toast.length_long).show(); // effacer le contenue champ login et mot de passe } else { c.movetofirst(); while (c.isafterlast() == false) { // conversion int string casting string id = "" + c.getint(0); string longitude = c.getstring(1); string latitude = c.getstring(2); string time = c.getstring(3); string key_employe = c.getstring(4); inputstream = null; arraylist<namevaluepair> namevaluepairs = new arraylist<namevaluepair>( 4); // namevaluepairs.add(new basicnamevaluepair("id", // ch1)); namevaluepairs.add(new basicnamevaluepair("longitude", longitude)); namevaluepairs .add(new basicnamevaluepair("latitude", latitude)); namevaluepairs.add(new basicnamevaluepair("time", time)); namevaluepairs.add(new basicnamevaluepair("key_employe", key_employe)); c.movetonext(); try { httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost( "http://10.0.2.2:8888/android/synchron.php"); httppost.setentity(new urlencodedformentity(namevaluepairs)); httpresponse response = httpclient.execute(httppost); httpentity entity = response.getentity(); = entity.getcontent(); } catch (exception e) { log.d("connexion_expired", "error in http connection" + e.tostring()); } } } c.close(); mabasesqlite.del(); mabasesqlite.close(); } private void updatedatabase(location location) { dbconection mabasesqlite = new dbconection(gpstrackingactivity.this); sqlitedatabase db = mabasesqlite.getwritabledatabase(); // mabasesqlite.oncreate(db); //mabasesqlite.onupgrade(db, 0, 0); longitude= location.getlatitude(); latitude=location.getlatitude(); currentdate = calendar.getinstance(); formatter = new simpledateformat("yyyy/mmm/dd hh:mm:ss"); mabasesqlite.addpoint(string.valueof(longitude), string.valueof(latitude), formatter.format(currentdate.gettime()),(key)); log.i("insert ", "ok"); mabasesqlite.close(); } @override public void onlocationchanged(location arg0) { } @override public void onproviderdisabled(string arg0) { // todo auto-generated method stub } @override public void onproviderenabled(string arg0) { // todo auto-generated method stub } @override public void onstatuschanged(string arg0, int arg1, bundle arg2) { // todo auto-generated method stub } }
networkonmainthread exception occurs when running network related operation on main ui thread. http://developer.android.com/reference/android/os/networkonmainthreadexception.html
you use should use asynctask purpose or create own thread.
you making http request on main ui thread.
http://developer.android.com/reference/android/os/asynctask.html
check link above topic under heading 4 steps.
example:
class thetask extends asynctask<void,void,void> { protected void onpreexecute() { super.onpreexecute(); //display progressdialog. } protected void doinbackground(void ...params) { //network related opearaiton. not update ui here return null; } protected void onpostexecute(void result) { super.onpostexecute(result); //dismiss progressdialog. //update ui } }
Comments
Post a Comment