在android中获取json时控制空值
Posted
技术标签:
【中文标题】在android中获取json时控制空值【英文标题】:controll null values in fetching json in android 【发布时间】:2013-03-10 17:10:06 【问题描述】:我在获取 json(空值)时收到此错误:
03-21 12:32:02.918: E/androidRuntime(20383): FATAL EXCEPTION: AsyncTask #2
03-21 12:32:02.918: E/AndroidRuntime(20383): java.lang.RuntimeException: An error occured while executing doInBackground()
03-21 12:32:02.918: E/AndroidRuntime(20383): at android.os.AsyncTask$3.done(AsyncTask.java:299)
03-21 12:32:02.918: E/AndroidRuntime(20383): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
03-21 12:32:02.918: E/AndroidRuntime(20383): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
03-21 12:32:02.918: E/AndroidRuntime(20383): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
03-21 12:32:02.918: E/AndroidRuntime(20383): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-21 12:32:02.918: E/AndroidRuntime(20383): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
03-21 12:32:02.918: E/AndroidRuntime(20383): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
03-21 12:32:02.918: E/AndroidRuntime(20383): at java.lang.Thread.run(Thread.java:856)
03-21 12:32:02.918: E/AndroidRuntime(20383): Caused by: java.lang.NullPointerException
03-21 12:32:02.918: E/AndroidRuntime(20383): at Dic.proj.pkg.notifService$check_last_asyn.doInBackground(notifService.java:253)
03-21 12:32:02.918: E/AndroidRuntime(20383): at Dic.proj.pkg.notifService$check_last_asyn.doInBackground(notifService.java:1)
03-21 12:32:02.918: E/AndroidRuntime(20383): at android.os.AsyncTask$2.call(AsyncTask.java:287)
03-21 12:32:02.918: E/AndroidRuntime(20383): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-21 12:32:02.918: E/AndroidRuntime(20383): ... 4 more
这是我的 check_last_asyn AsynTask:
// check if notification is available asyntask
class check_last_asyn extends AsyncTask<Void, Integer, Boolean>
@Override
protected Boolean doInBackground(Void... arg0)
if(isOnline())
RestClient client = new RestClient(
"http://mysite.org/api/check_last.php");
client.AddParam("last", String.valueOf(last_notif_no));
try
client.Execute(RequestMethod.GET);
catch (Exception e)
e.printStackTrace();
String response = client.getResponse();
if(!response.equals(null))
update_response = response;
else
update_response= "'update':'no'";
return true;
我知道这是因为空值,但我不知道如何控制这段代码中的空值...
【问题讨论】:
您确定:last_notif_no
from:client.AddParam("last", String.valueOf(last_notif_no));
不为空吗?
参考这个***.com/questions/15542404/…
是的,它总是有价值的
【参考方案1】:
你可以控制喜欢
if(!TextUtils.isEmpty(response))
try
JSONObject jobj = new JSONObject(response);
String stolan_id = null;
Boolean bstolan_id = jobj.has("keyhere");
if(bstolan_id)
stolan_id = jobj.getString("keyhere");
catch (JSONException e)
e.printStackTrace();
【讨论】:
【参考方案2】:我认为,String responce
var 可能为 null,所以只需添加对 null 值的检查:
String responce = client.getResponce();
if (responce == null)
// As flag, which represents, that there is no answer from service
// Or other logic
return false;
// your code
【讨论】:
【参考方案3】:应该这样做
if(response!=null && !(response.trim()).equals(""))
update_response = response;
else
update_response= "'update':'no'";
【讨论】:
@EmilAdz 如果你看起来真的很接近它的不同。不是部分答案。 @EmilAdz 甚至在我的回答还不够全面之前。【参考方案4】:检查应该是这样的:
if(response != null && !response.equals(""))
【讨论】:
以上是关于在android中获取json时控制空值的主要内容,如果未能解决你的问题,请参考以下文章
在grails中解析JSON时如何获取真正的空值而不是JSONObject.NULL值
使用 swiftyJSON 在 Swift 2.0 中解析 JSON 时获取空值