Tryng to get a json response from API web to Android with android-async-http lib -
i've been working android-async-http (http://loopj.com/android-async-http/) lib android reason can't catch response server, know server recieve , things should do, can't response no reason.
here method calls api:
public user registuser(string mail, string pass) throws unsupportedencodingexception { final user user = new user(); user.settoken("enter"); string bodyasjson = "{\"user\":{\"email\":\""+mail+"\",\"password\":\""+pass+"\"}}"; stringentity entity = new stringentity(bodyasjson); header[] headers = { new basicheader("content-type", "application/json") }; client.post(this.context, "http://104.131.189.224/api/user", headers , entity, "application/json", new jsonhttpresponsehandler() { @override public void onsuccess(int statuscode, header[] headers, jsonobject json) { try { json = json.getjsonobject("user"); user.setid(json.getint("id")); user.setemail(json.getstring("email")); user.setpassword("123456"); user.settoken(json.getstring("auth_token")); } catch ( jsonexception e) { user.settoken("not json"); } catch (exception e) { user.settoken("error "); } } @override public void onsuccess(int statuscode, header[] headers, jsonarray response) { user.settoken("comes json array"); } @override public void onsuccess(int statuscode, header[] headers, string responsestring) { user.settoken(responsestring); } @override public void onfailure(int statuscode, header[] headers, string responsestring, throwable throwable) { user.settoken("error"); } @override public void onretry(int retryno) { user.settoken("nothing"); } }); return user; }
when call method, user.gettoken shows "enter" put in beginin, means, never entered in onsuccess, onfailure, or onretry methods.
but know server recieve request because server log shows: (example: email: carlos@prueba.com, pass: prueba)
"=>"carlos@prueba.com", "password"=>"[filtered]"}} d, [2015-03-17t05:15:27.660562 #28450] debug -- : (0.8ms) begin d, [2015-03-17t05:15:27.671126 #28450] debug -- : user exists (2.6ms) select 1 one `users` `users`.`email` = binary 'carlos@prueba.com' limit 1 d, [2015-03-17t05:15:27.677448 #28450] debug -- : sql (1.0ms) insert `us ers` (`email`, `encrypted_password`, `created_at`, `updated_at`) values ('carlos @prueba.com', '$2a$10$dg358izoag5kvj8zjteviev2v5b9canaqiyi1zd4eifc.0mh.nmu6', '2 015-03-17 05:15:27.672898', '2015-03-17 05:15:27.672898') d, [2015-03-17t05:15:27.681514 #28450] debug -- : (2.0ms) commit d, [2015-03-17t05:15:27.684634 #28450] debug -- : user exists (0.6ms) select 1 one `users` `users`.`auth_token` = '6aff3b4162cfcf3062a6db12a1c ee2bc' limit 1 d, [2015-03-17t05:15:27.685582 #28450] debug -- : (0.2ms) begin d, [2015-03-17t05:15:27.690901 #28450] debug -- : sql (0.8ms) update `users` set `auth_token` = '6aff3b4162cfcf3062a6db12a1cee2bc', `updated_at` = '2015-03-1 7 05:15:27.687516' `users`.`id` = 11 d, [2015-03-17t05:15:27.693809 #28450] debug -- : (1.8ms) commit i, [2015-03-17t05:15:27.698987 #28450] info -- : rendered api/users/_user.jso n.jbuilder (0.3ms) i, [2015-03-17t05:15:27.700292 #28450] info -- : rendered api/users/create.js on.jbuilder (3.2ms) i, [2015-03-17t05:15:27.701395 #28450] info -- : completed 200 ok in 223ms (vie ws: 6.3ms | activerecord: 10.0ms)
the server should response json in format:
{"user":{"id":3,"email":"carlos@prueba.com","auth_token":"dc45800fddee07cf9b300d2765283cb2"}}
most tutorials outdated , try use apache library did find working one.
while trying manipulate team treehouse tutorial ( https://teamtreehouse.com/library/build-a-weather-app/ ) work event finder api instead of weather api, ran same problem.
they use okhttp library
- compile okhttp library
build.gradle
file under module:app
compile 'com.squareup.okhttp:okhttp:2.4.0'
this recent version of 7/9/15
- visit api url see if indeed retrieving data , in correct format. me using eventful.com , finding events in area. ( https://api.eventful.com/json/events/search?l=arizona&within=15&units=miles&app_key= ) app key go after "=" @ end of url.
at point working great, needed add okhttp code download json data
- add internet permissions manifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.thestephenmiller.myapp" > <uses-permission android:name="android.permission.internet" /> </manifest>
- open class or activity request made , add following code.
string eventfulurl = "https://api.eventful.com/json/events/search?l=arizona&within=15&units=miles&app_key="+apikey; okhttpclient client = new okhttpclient(); request request = new request.builder() .url(eventfulurl) .build();
and make call
` call call = client.newcall(request); call.enqueue(new callback() { @override public void onfailure(request request, ioexception e) { } @override public void onresponse(response response) throws ioexception { try { if (response.issuccessful()) { log.v(tag, response.body().string()); } } catch (ioexception e) { log.e(tag, "exception caught: ", e); } } });
all of added oncreate()
this line log.v(tag, response.body().string());
outputs response log , in if statement can deal data.
the code not response if url not start "http://" or "https://" app still run error free
Comments
Post a Comment