Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android json解析_Android_Json - Fatal编程技术网

Android json解析

Android json解析,android,json,Android,Json,我需要一点帮助和一点建议。我需要一双额外的眼睛来查看我的代码,看看我解析的Yahoo Answers JSON数据是否有错误。我认为我对JSON数据的解析不正确,我只是希望有人检查一下,以确保我解析了正确的数据 这是我试图从web服务解析的数据: public class ListView extends ListActivity { ArrayList<HashMap<String, String>> questionList;

我需要一点帮助和一点建议。我需要一双额外的眼睛来查看我的代码,看看我解析的Yahoo Answers JSON数据是否有错误。我认为我对JSON数据的解析不正确,我只是希望有人检查一下,以确保我解析了正确的数据

这是我试图从web服务解析的数据:

public class ListView extends ListActivity {    


    ArrayList<HashMap<String, String>> questionList;        

     final String TAG_RESULTS = "results";
     final String TAG_QUESTION_SUBJECT = "Subject";
     final String TAG_QUESTION_NUMANSWERS = "NumAnswers";
     final String TAG_QUESTION = "question";
     final String TAG_QUESTION_CONTENT = "Content";
     final String TAG_QUESTION_CHOSENANSWER = "ChosenAnswer";
     final String TAG_ANSWERS = "answers";
     final String TAG_ANSWER = "answer";    
     final String TAG_ANSWERS_CONTENT = "content";      
     final String TAG_QUERY = "query";

            JSONArray question = null;          

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        //setContentView(R.layout.listview);        




      new LoadAllData().execute();
        }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == 100) {
            Intent intent = getIntent();
            startActivity(intent);
            finish();
        }
    }

    class LoadAllData extends AsyncTask<String, String, String> {


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            ProgressDialog pDialog; 
            pDialog = new ProgressDialog(ListView.this);
            pDialog.setMessage("Loading Data. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
            if (pDialog != null && pDialog.isShowing()) pDialog.dismiss();

        }

        protected String doInBackground(String... args) {

            try {
                Intent in = getIntent();
                String searchTerm = in.getStringExtra("TAG_SEARCH");
                String query = URLEncoder.encode(searchTerm, "utf-8");
                String URL = "http://example.com";
                JSONParsser jParser = new JSONParsser();
                JSONObject json = jParser.readJSONFeed(URL);
                try {
                    //question = json.getJSONArray(TAG_QUESTION);


                    JSONArray questions = json.getJSONObject("all").getJSONArray("questions");

                    for(int i = 0; i < questions.length(); i++) {
                        JSONObject question = questions.getJSONObject(i);


                    String Subject = question.getString(TAG_QUESTION_SUBJECT);
                    String NumAnswers = question.getString(TAG_QUESTION_NUMANSWERS);
                    String ChosenAnswer = question.getString(TAG_QUESTION_CHOSENANSWER);
                    String Content = question.getString(TAG_QUESTION_CONTENT);

                    JSONArray answers = question.getJSONObject(TAG_ANSWERS).getJSONArray(TAG_ANSWER);


                    JSONObject answer = answers.getJSONObject(0);

                    String content = answer.getString(TAG_ANSWERS_CONTENT);

                               HashMap<String, String> map = new HashMap<String, String>();

                               map.put(TAG_QUESTION_SUBJECT, Subject);
                               map.put(TAG_QUESTION_NUMANSWERS, NumAnswers);

                               questionList.add(map);


                    }


                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

                return TAG_QUESTION     ; 



        }
        protected void onPostExecute(String file_URL) {

                ListAdapter adapter = new SimpleAdapter(getBaseContext(), questionList,
                        R.layout.listview,
                        new String[] { TAG_QUESTION_SUBJECT, TAG_QUESTION_NUMANSWERS }, new int[] {
                        R.id.Subject, R.id.NumAnswers });

                setListAdapter(adapter);

                android.widget.ListView lv = getListView();

                lv.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
                        // TODO Auto-generated method stub

                    }   

                });     

        }}

    }
{
“查询”:{
“计数”:1,
“已创建”:“2013-08-09T19:37:46Z”,
“郎”:“恩我们”,
“诊断”:{
“publiclyCallable”:“真实”,
“url”:{
“执行开始时间”:“524”,
“执行停止时间”:“783”,
“执行时间”:“259”,
“代理”:“默认”,
“内容”:http://answers.yahooapis.com/AnswersService/V1/getQuestion?question_id=20100207231859AAZVura"
},
“用户时间”:“783”,
“服务时间”:“259”,
“生成版本”:“38788”
},
“结果”:{
“问题”:{
“id”:“20100207231859Aazvra”,
“类型”:“已回答”,
“主题”:“是什么让一些人认为你不能证明自己是否定的?”,
“内容”:"说真的,人类,这是什么胡说八道?首先,“你不能证明否定”这句话本身就是否定的。那么,如果它是真的,你怎么可能知道呢?\n\n但更重要的是,否定的说法可以用与肯定的说法完全相同的方式来反驳。让我们举一个明显错误的例子,是吗?那么方形圆。如果我说有一个形状同时是正方形和圆形,你可以反驳我的说法(也就是说,你可以证明否定的说法,即不存在这样的形状)通过证明正方形的属性与圆形的属性相矛盾。简单,是吗?\n\n那么这是怎么回事?请用时钟可以理解的词语解释。\n只有当所讨论的形而上学的事物与物理世界没有联系时,这才是真的。据说在地球上做过事情的上帝n例如,可以通过确定这些事情没有发生来反驳。\n\n胡林丁,仅仅因为语句的真值可能会改变,并不意味着它在任何给定的时间点上都没有真值。\n\n如上所述,正方形被定义为具有特定特征的形状。如果形状没有这些特征,它就不是一个正方形正方形。不可能发现不符合正方形定义的正方形。圆形也是如此。由于这两个定义相互矛盾,形状不能同时符合两者。\n\n而且,许多人确实对上帝的属性有想法。他们已经写过书,将某些属性归于上帝威廉斯,你误解了我的例子的性质。我是否见过一个并不重要。事实是,如果一个例子确实存在,它必须符合正方形的定义,也必须符合圆形的定义。这意味着,例如,它必须正好有一条边和四条边。这是相反的这是逻辑的一个基本假设,一个矛盾的陈述必须是错误的。\nBloodzwurth,你很难证明这一点,因为你故意含糊其辞。这与否定性无关。你要证明这个说法是正确的,就像你要证明它是错误的一样困难\我不知道你说的是时钟,猫。不管怎样,我同意你的观点,但只是关于后验论点。\n胡林丁,你把我的证明当作归纳论点,事实并非如此。我不是说没有正方形也是圆,因为我们还没有遇到过任何正方形。\n\n让我们这样说。\n1.如果x是正方形,那么x是直的边。(这是正方形定义的一部分,因此该语句是重言式的,因此必须正确。)\n2.如果x是圆,则x没有直边。(同样,只是定义的一部分。)\n3.x既是圆又是正方形。(假设前提。)\n4.x有直边(从1到3)。\n5.x没有直边(从2和3开始)。\n6.x有或没有直边(从4和5开始)。\n7.x既不是正方形也不是圆形(从3和6开始,简化和荒谬)\n\n请参阅?简单的演绎逻辑。此证明适用于任何形状“x”,无论是否已找到。我所证明的不仅是方形圆不存在,而且方形圆不可能存在。\n“,
“日期”:“2010-02-07 23:18:59”,
“时间戳”:“1265584739”,
“链接”:http://answers.yahoo.com/question/?qid=20100207231859AAZVura",
“类别”:{
“id”:“396545163”,
“内容”:“宗教与灵性”
},
“UserId”:“v2w0u1XAaa”,
“UserNick”:“黄色闹钟”,
“UserPhotoURL”:”http://socialprofiles.zenfs.com/images/a3b93240efb619ea3d1b5e2e90844784_48.jpg",
“努曼斯韦尔”:“9”,
“NumComments”:“2”,
“ChosenAnswer”:一个时钟可以理解的单词是什么?Hmmm\n\nOk\n\t toc tic toc tic toc tic toc tic toc tic toc tic toc tic toc tic toc tic toc tic toc toc tic toc toc toc tic toc toc toc toc tic toc toc toc toc toc tic toc toc toc tic toc toc toc tic toc toc toc toc toc tic toc toc toc toc toc toc tic toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toctoc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toc-toctoc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc toc变速箱变速箱变速箱变速箱变速箱变速箱变速箱变速箱变速箱变速箱变速箱变速箱
public class ListView extends ListActivity {    


    ArrayList<HashMap<String, String>> questionList;        

     final String TAG_RESULTS = "results";
     final String TAG_QUESTION_SUBJECT = "Subject";
     final String TAG_QUESTION_NUMANSWERS = "NumAnswers";
     final String TAG_QUESTION = "question";
     final String TAG_QUESTION_CONTENT = "Content";
     final String TAG_QUESTION_CHOSENANSWER = "ChosenAnswer";
     final String TAG_ANSWERS = "answers";
     final String TAG_ANSWER = "answer";    
     final String TAG_ANSWERS_CONTENT = "content";      
     final String TAG_QUERY = "query";

            JSONArray question = null;          

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        //setContentView(R.layout.listview);        




      new LoadAllData().execute();
        }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == 100) {
            Intent intent = getIntent();
            startActivity(intent);
            finish();
        }
    }

    class LoadAllData extends AsyncTask<String, String, String> {


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            ProgressDialog pDialog; 
            pDialog = new ProgressDialog(ListView.this);
            pDialog.setMessage("Loading Data. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
            if (pDialog != null && pDialog.isShowing()) pDialog.dismiss();

        }

        protected String doInBackground(String... args) {

            try {
                Intent in = getIntent();
                String searchTerm = in.getStringExtra("TAG_SEARCH");
                String query = URLEncoder.encode(searchTerm, "utf-8");
                String URL = "http://example.com";
                JSONParsser jParser = new JSONParsser();
                JSONObject json = jParser.readJSONFeed(URL);
                try {
                    //question = json.getJSONArray(TAG_QUESTION);


                    JSONArray questions = json.getJSONObject("all").getJSONArray("questions");

                    for(int i = 0; i < questions.length(); i++) {
                        JSONObject question = questions.getJSONObject(i);


                    String Subject = question.getString(TAG_QUESTION_SUBJECT);
                    String NumAnswers = question.getString(TAG_QUESTION_NUMANSWERS);
                    String ChosenAnswer = question.getString(TAG_QUESTION_CHOSENANSWER);
                    String Content = question.getString(TAG_QUESTION_CONTENT);

                    JSONArray answers = question.getJSONObject(TAG_ANSWERS).getJSONArray(TAG_ANSWER);


                    JSONObject answer = answers.getJSONObject(0);

                    String content = answer.getString(TAG_ANSWERS_CONTENT);

                               HashMap<String, String> map = new HashMap<String, String>();

                               map.put(TAG_QUESTION_SUBJECT, Subject);
                               map.put(TAG_QUESTION_NUMANSWERS, NumAnswers);

                               questionList.add(map);


                    }


                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

                return TAG_QUESTION     ; 



        }
        protected void onPostExecute(String file_URL) {

                ListAdapter adapter = new SimpleAdapter(getBaseContext(), questionList,
                        R.layout.listview,
                        new String[] { TAG_QUESTION_SUBJECT, TAG_QUESTION_NUMANSWERS }, new int[] {
                        R.id.Subject, R.id.NumAnswers });

                setListAdapter(adapter);

                android.widget.ListView lv = getListView();

                lv.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
                        // TODO Auto-generated method stub

                    }   

                });     

        }}

    }
08-11 02:42:52.882: E/AndroidRuntime(4516): FATAL EXCEPTION: AsyncTask #1
08-11 02:42:52.882: E/AndroidRuntime(4516): java.lang.RuntimeException: An error occured while executing doInBackground()
08-11 02:42:52.882: E/AndroidRuntime(4516):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
08-11 02:42:52.882: E/AndroidRuntime(4516):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
08-11 02:42:52.882: E/AndroidRuntime(4516):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
08-11 02:42:52.882: E/AndroidRuntime(4516):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
08-11 02:42:52.882: E/AndroidRuntime(4516):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
08-11 02:42:52.882: E/AndroidRuntime(4516):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
08-11 02:42:52.882: E/AndroidRuntime(4516):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
08-11 02:42:52.882: E/AndroidRuntime(4516):     at java.lang.Thread.run(Thread.java:856)
08-11 02:42:52.882: E/AndroidRuntime(4516): Caused by: java.lang.NullPointerException
08-11 02:42:52.882: E/AndroidRuntime(4516):     at com.theproblemsolver.ListView$LoadAllData.doInBackground(ListView.java:118)
08-11 02:42:52.882: E/AndroidRuntime(4516):     at com.theproblemsolver.ListView$LoadAllData.doInBackground(ListView.java:1)
08-11 02:42:52.882: E/AndroidRuntime(4516):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
08-11 02:42:52.882: E/AndroidRuntime(4516):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
08-11 02:42:52.882: E/AndroidRuntime(4516):     ... 4 more
JSONArray questions = jObj.getJSONObject("all").getJSONArray("questions");

for(int i = 0; i < questions.length(); i++) {
    JSONObject question = questions.getJSONObject(i);

    String subject = question.getString("Subject");
    String numAnswers = question.getString("NumAnswers");
    String chosenAnswer = question.getString("ChosenAnswer");
    String content = question.getString("Content");
}
query -> results -> Question
final String TAG_QUERY = "query";

JSONObject question = jObj.getJSONObject(TAG_QUERY)
    .getJSONObject(TAG_RESULTS)
    .getJSONObject(TAG_QUESTION);
String subject = question.getString(TAG_QUESTION_SUBJECT);
String numAnswers = question.getString(TAG_QUESTION_NUMANSWERS);
String chosenAnswer = question.getString(TAG_QUESTION_CHOSENANSWER);
String content = question.getString(TAG_QUESTION_CONTENT);

JSONArray answers = question.getJSONObject(TAG_ANSWERS).getJSONArray(TAG_ANSWER);

// If you only want the first answer:
JSONObject answer = answers.getJSONObject(0);

String content = answer.getString(TAG_ANSWERS_CONTENT);
final String TAG_RESULTS = "results";
final String TAG_QUESTION_SUBJECT = "Subject";
final String TAG_QUESTION_NUMANSWERS = "NumAnswers";
final String TAG_QUESTION = "Question";
final String TAG_QUESTION_CONTENT = "Content";
final String TAG_QUESTION_CHOSENANSWER = "ChosenAnswer";
final String TAG_ANSWERS = "Answers";
final String TAG_ANSWER = "Answer";    
final String TAG_ANSWERS_CONTENT = "Content";      

JSONArray questions = jObj.getJSONObject(TAG_RESULTS).getJSONArray(TAG_QUESTION);

for(int i = 0; i < questions.length(); i++) {
    JSONObject question = questions.getJSONObject(i);

    String subject = question.getString(TAG_QUESTION_SUBJECT);
    String numAnswers = question.getString(TAG_QUESTION_NUMANSWERS);
    String chosenAnswers= question.getString(TAG_QUESTION_CHOSENANSWER);
    String content = question.getString(TAG_QUESTION_CONTENT);

    JSONObject answers = question.getJSONObject(TAG_ANSWERS);
    JSONObject answer = answers.getJSONObject(TAG_ANSWER);
    String Content = answers.getString(TAG_ANSWERS_CONTENT);
}
JSONObject answers = question.getJSONObject(TAG_ANSWERS);
JSONArray answers = question.getJSONArray(TAG_ANSWERS);