使用JSON空指针获得价值 [英] getting value using JSON nullpointer
本文介绍了使用JSON空指针获得价值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是谷歌获得的货币和使用JSON我应该得到的货币的价值,但我得到一个错误。 不幸的是,XXX已经停止了。
字符串结果= NULL;
我Asynktask
私有类usdjson扩展的AsyncTask< URL,无效的JSONObject> {
@覆盖
受保护的JSONObject doInBackground(网址...网址){
DefaultHttpClient的HttpClient =新DefaultHttpClient(新BasicHttpParams());
HttpPost httppost =新HttpPost(http://www.google.com/ig/calculator?hl=en&q=2GBP=?USD);
httppost.setHeader(内容型,应用/ JSON);
的InputStream的InputStream = NULL;
尝试 {
HTT presponse响应= httpclient.execute(httppost);
HttpEntity实体= response.getEntity();
的InputStream = entity.getContent();
// JSON是UTF-8在默认情况下
的BufferedReader读卡器=新的BufferedReader(新的InputStreamReader(InputStream中,UTF-8),8);
StringBuilder的SB =新的StringBuilder();
串线= NULL;
而((行= reader.readLine())!= NULL)
{
sb.append(行+\ N);
}
结果= sb.toString();
Log.e(日志,结果);
}赶上(例外五){
//哎呀
}
最后 {
尝试{如果(的InputStream!= NULL)inputStream.close();}赶上(例外挤){}
}
的JSONObject对象= NULL;
尝试 {
对象=新的JSONObject的(结果);
}赶上(JSONException E){
// TODO自动生成的catch块
e.printStackTrace();
}
JSONArray Jarray = NULL;
尝试 {
Jarray = object.getJSONArray(左轴);
}赶上(JSONException E){
// TODO自动生成的catch块
e.printStackTrace();
}
JSONObject的Jasonobject = NULL;
的for(int i = 0; I< Jarray.length();我++){
尝试 {
Jasonobject = Jarray.getJSONObject(ⅰ);
}赶上(JSONException E){
// TODO自动生成的catch块
e.printStackTrace();
}
}
返回Jasonobject;
}
@覆盖
保护无效onPostExecute(JSONObject的jsonData){
value.setText(结果);
}
}
我的按钮,点击
.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
新usdjson()执行()。
}
});
在logcat的:
08-30 21:21:51.769:E / AndroidRuntime(28903):致命异常:AsyncTask的#1
08-30 21:21:51.769:E / AndroidRuntime(28903):java.lang.RuntimeException的:执行doInBackground时出错()
08-30 21:21:51.769:E / AndroidRuntime(28903):在android.os.AsyncTask $ 3.done(AsyncTask.java:299)
08-30 21:21:51.769:E / AndroidRuntime(28903):在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
08-30 21:21:51.769:E / AndroidRuntime(28903):在java.util.concurrent.FutureTask.setException(FutureTask.java:219)
08-30 21:21:51.769:E / AndroidRuntime(28903):在java.util.concurrent.FutureTask.run(FutureTask.java:239)
08-30 21:21:51.769:E / AndroidRuntime(28903):在android.os.AsyncTask $ SerialExecutor $ 1.运行(AsyncTask.java:230)
08-30 21:21:51.769:E / AndroidRuntime(28903):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
解决方案
AsyncTask的是不是在这种情况下,最好的办法,试试:
私人无效转换(){
新主题(新的Runnable(){
@覆盖
公共无效的run(){
字符串URL =http://www.google.com/ig/calculator?hl=en&q="+amount+"GBP=?USD;
字符串请求=你的HTTP请求的结果;
尝试 {
的JSONObject的JSONObject =新的JSONObject的(要求);
最后的字符串结果= jsonObject.getString(RHS);
handler.post(新的Runnable(){
@覆盖
公共无效的run(){
value.setText(结果);
}
});
}赶上(JSONException E){
e.printStackTrace();
}
}
})。开始();
}
I'm using google to get the currency and using json I should get the value of the currency but I get an error. "Unfortunately, xxx has stopped."
String result = null;
my Asynktask
private class usdjson extends AsyncTask<URL, Void, JSONObject> {
@Override
protected JSONObject doInBackground(URL... urls) {
DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
HttpPost httppost = new HttpPost("http://www.google.com/ig/calculator?hl=en&q=2GBP=?USD");
httppost.setHeader("Content-type", "application/json");
InputStream inputStream = null;
try {
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
inputStream = entity.getContent();
// json is UTF-8 by default
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
result = sb.toString();
Log.e("Log", result);
} catch (Exception e) {
// Oops
}
finally {
try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
}
JSONObject object = null;
try {
object = new JSONObject(result);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JSONArray Jarray = null;
try {
Jarray = object.getJSONArray("lhs");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JSONObject Jasonobject = null;
for (int i = 0; i < Jarray.length(); i++) {
try {
Jasonobject = Jarray.getJSONObject(i);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return Jasonobject;
}
@Override
protected void onPostExecute(JSONObject jsonData) {
value.setText(result);
}
}
my button click
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new usdjson().execute();
}
});
the logcat:
08-30 21:21:51.769: E/AndroidRuntime(28903): FATAL EXCEPTION: AsyncTask #1
08-30 21:21:51.769: E/AndroidRuntime(28903): java.lang.RuntimeException: An error occured while executing doInBackground()
08-30 21:21:51.769: E/AndroidRuntime(28903): at android.os.AsyncTask$3.done(AsyncTask.java:299)
08-30 21:21:51.769: E/AndroidRuntime(28903): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
08-30 21:21:51.769: E/AndroidRuntime(28903): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
08-30 21:21:51.769: E/AndroidRuntime(28903): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
08-30 21:21:51.769: E/AndroidRuntime(28903): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
08-30 21:21:51.769: E/AndroidRuntime(28903): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
解决方案
AsyncTask is not the best way in this case, try:
private void convert() {
new Thread(new Runnable() {
@Override
public void run() {
String url = "http://www.google.com/ig/calculator?hl=en&q="+amount+"GBP=?USD";
String request = "THE RESULT OF YOUR HTTP REQUEST";
try {
JSONObject jsonObject = new JSONObject(request);
final String result = jsonObject.getString("rhs");
handler.post(new Runnable() {
@Override
public void run() {
value.setText(result);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}).start();
}
这篇关于使用JSON空指针获得价值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文