i'm new in android programming , may missed obvious mistake there don't see right now.
the point pretty simple. have working httpget method , trying changed httppost method. didn't work out.
the interesting part "lasttweet" method. commented post-request, said, if i'm changing post app crashes.
so grateful if explain me did wrong. thank you.
import android.app.activity; import android.os.asynctask; import android.os.bundle; import android.widget.textview; import android.widget.toast; import org.apache.http.httpentity; import org.apache.http.httpresponse; import org.apache.http.namevaluepair; import org.apache.http.client.clientprotocolexception; import org.apache.http.client.httpclient; import org.apache.http.client.entity.urlencodedformentity; import org.apache.http.client.methods.httpget; import org.apache.http.client.methods.httppost; import org.apache.http.impl.client.defaulthttpclient; import org.apache.http.message.basicnamevaluepair; import org.apache.http.protocol.http; import org.apache.http.util.entityutils; import org.json.jsonarray; import org.json.jsonexception; import org.json.jsonobject; import java.io.ioexception; import java.util.arraylist; import java.util.list; public class mainactivity extends activity { textview text; httpclient client; jsonobject json; final static string url = "http://www.openligadb.de/api/getmatchdata/bl1/2014/15"; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); text = (textview)findviewbyid(r.id.mytextview); client = new defaulthttpclient(); new read().execute("matchid"); } public jsonobject lasttweet(string username) throws clientprotocolexception, ioexception, jsonexception { httpget = new httpget(url); //httppost post = new httppost(url); /* list<namevaluepair> pairs = new arraylist<namevaluepair>(); pairs.add(new basicnamevaluepair("key1", "value1")); pairs.add(new basicnamevaluepair("key2", "value2")); post.setentity(new urlencodedformentity(pairs)); */ httpresponse r = client.execute(get); //httpresponse r = client.execute(post); int status = r.getstatusline().getstatuscode(); if (status == 200) { httpentity e = r.getentity(); string data = entityutils.tostring(e); jsonarray timeline = new jsonarray(data); jsonobject last = timeline.getjsonobject(0); return last; } else { toast.maketext(mainactivity.this, "error", toast.length_long).show(); return null; } } public class read extends asynctask<string, integer, string>{ @override protected string doinbackground(string... params) { try { json = lasttweet("wurst"); return json.getstring(params[0]); } catch (clientprotocolexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } catch (jsonexception e) { e.printstacktrace(); } return null; } @override protected void onpostexecute(string s) { text.settext(s); } }
}
thanks quick response. asked greenapps logcat:
local branch: remote branch: local patches: reconstruct branch: 04-29 16:55:02.764 2642-2642/com.example.itsme.jsonnb2 d/openglrenderer﹕ enabling debug mode 0 04-29 16:55:04.116 2642-2855/com.example.itsme.jsonnb2 w/dalvikvm﹕ threadid=11: thread exiting uncaught exception (group=0x418a1da0) 04-29 16:55:04.146 2642-2855/com.example.itsme.jsonnb2 e/androidruntime﹕ fatal exception: asynctask #1 process: com.example.itsme.jsonnb2, pid: 2642 java.lang.runtimeexception: error occured while executing doinbackground() @ android.os.asynctask$3.done(asynctask.java:300) @ java.util.concurrent.futuretask.finishcompletion(futuretask.java:355) @ java.util.concurrent.futuretask.setexception(futuretask.java:222) @ java.util.concurrent.futuretask.run(futuretask.java:242) @ android.os.asynctask$serialexecutor$1.run(asynctask.java:231) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1112) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:587) @ java.lang.thread.run(thread.java:841) caused by: java.lang.runtimeexception: can't create handler inside thread has not called looper.prepare() @ android.os.handler.<init>(handler.java:200) @ android.os.handler.<init>(handler.java:114) @ android.widget.toast$tn.<init>(toast.java:384) @ android.widget.toast.<init>(toast.java:113) @ android.widget.toast.maketext(toast.java:272) @ com.example.itsme.jsonnb2.mainactivity.lasttweet(mainactivity.java:68) @ com.example.itsme.jsonnb2.mainactivity$read.doinbackground(mainactivity.java:78) @ com.example.itsme.jsonnb2.mainactivity$read.doinbackground(mainactivity.java:73) @ android.os.asynctask$2.call(asynctask.java:288) @ java.util.concurrent.futuretask.run(futuretask.java:237) at android.os.asynctask$serialexecutor$1.run(asynctask.java:231) at java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1112) at java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:587) at java.lang.thread.run(thread.java:841)
in doinbackground cannot use toast(). using toast() in lasttweet() , hence in doinbackground. replace toast bij log.d(). can leave message in private string of asynctask , display string in onpostexecute in .. toast(). study logcat , see.
json = lasttweet("wurst"); return json.getstring(params[0]);
as lasttweet() can return null , hence json==null following statement json.getstring(params[0]); cause nullpointerexception. not execute statement when json==null.
change
json = lasttweet("wurst"); if ( json == null ) return null; return json.getstring(params[0]);
in onpostexcute parameter s can null. check parameter null , display toast saying when null.