使用JSON空指针获得价值 [英] getting value using JSON nullpointer

查看:111
本文介绍了使用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 =htt​​p://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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆