繁体   English   中英

Android帮助需要json

[英]Android help need with json

我需要一些帮助来编码我的JSON字符串以从Web服务接收某些数据。 我已经尝试用我在JSONParsser类中看到的标准方式来格式化我的JSON字符串,但是我被告知我的JSON字符串无效,你可以在我的旧问题中看到。 将字符串转换为JSONObject我不是要求任何人为我做我的代码我只是问你能看看我的代码并让我知道我的URL参数是否有任何错误以及我应该将我的JSON字符串编码为从此Web服务接收数据。 这里是链接到URL参数http://developer.yahoo.com/answers/V1/questionSearch.html并查看我正在尝试解析的数据只是看看Json数据而不是这个问题的类https:/ /stackoverflow.com/questions/18028570/yahoo-answers-json-parse

主要活动:

public class MainActivity extends Activity {

    Button getanswer;  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        Button getanswer = (Button) findViewById(R.id.button1);
        getanswer.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {       
            EditText et = (EditText) findViewById(R.id.editText1);
            String searchTerm = et.getText().toString().trim();         
            Intent in = new Intent(MainActivity.this, ListView.class);
            in.putExtra("TAG_SEARCH", searchTerm);
            startActivity(in);
        }


        });
    }}

ListView活动:

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";      

            JSONArray results;

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

         //questionList = new ArrayList<HashMap<String, String>>();



    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://answers.yahooapis.com/AnswerService/V1/questionSearch?appid=YahooDemo&query="+ query +"search_in=question&sort=relevance&results=25&output=json&callback=ws_results";
                JSONParsser jParser = new JSONParsser();
                JSONObject jObj = jParser.readJSONFeed(URL);
                try {
                    results = jObj.getJSONArray(TAG_RESULTS);

                    for(int i = 0; i < results.length(); i++) {
                           JSONObject r = results.getJSONObject(i);

                           JSONObject Question = r.getJSONObject(TAG_QUESTION);
                           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 Content1 = Answers.getString(TAG_ANSWERS_CONTENT);

                             questionList = new ArrayList<HashMap<String, String>>();

                               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_RESULTS ; 



        }
        @Override
        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

                    }   

                });     

        }}

    }

JSONParsser:

public class JSONParsser {

    InputStream is;
    JSONObject jObj;
    String json = "";
    public EditText et;

    public JSONParsser () {
    }

    public JSONObject readJSONFeed(String URL) {

        try{
        HttpClient client = new DefaultHttpClient();
        HttpPost request = new HttpPost(URL);
        //request.setURI(website);
        try {
            HttpResponse response = client.execute(request);
        HttpEntity httpEntity = response.getEntity();
        is = httpEntity.getContent();

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
           Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        Log.d("JSON String",json);

        return jObj;

        }finally{}

    }{
    }}

这是我打印的JSON字符串,如果您了解它,它基本上只是从Web服务返回一个错误页面:

08-02 20:02:27.535: D/JSON String(795): <!doctype html public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
08-02 20:02:27.535: D/JSON String(795): <html><head><title>Yahoo! - 404 Not Found</title><style>
08-02 20:02:27.535: D/JSON String(795): /* nn4 hide */ 
08-02 20:02:27.535: D/JSON String(795): /*/*/
08-02 20:02:27.535: D/JSON String(795): body {font:small/1.2em arial,helvetica,clean,sans-serif;font:x-small;text-align:center;}table {font-size:inherit;font:x-small;}
08-02 20:02:27.535: D/JSON String(795): html>body {font:83%/1.2em arial,helvetica,clean,sans-serif;}input {font-size:100%;vertical-align:middle;}p, form {margin:0;padding:0;}
08-02 20:02:27.535: D/JSON String(795): p {padding-bottom:6px;margin-bottom:10px;}#doc {width:48.5em;margin:0 auto;border:1px solid #fff;text-align:center;}#ygma {text-align:right;margin-bottom:53px}
08-02 20:02:27.535: D/JSON String(795): #ygma img {float:left;}#ygma div {border-bottom:1px solid #ccc;padding-bottom:8px;margin-left:152px;}#bd {clear:both;text-align:left;width:75%;margin:0 auto 20px;}
08-02 20:02:27.535: D/JSON String(795): h1 {font-size:135%;text-align:center;margin:0 0 15px;}legend {display:none;}fieldset {border:0 solid #fff;padding:.8em 0 .8em 4.5em;}
08-02 20:02:27.535: D/JSON String(795): form {position:relative;background:#eee;margin-bottom:15px;border:1px solid #ccc;border-width:1px 0;}
08-02 20:02:27.535: D/JSON String(795): #s1p {width:15em;margin-right:.1em;}
08-02 20:02:27.535: D/JSON String(795): form span {position:absolute;left:70%;top:.8em;}form a {font:78%/1.2em arial;display:block;padding-left:.8em;white-space:nowrap;background: url(http://l.yimg.com/a/i/s/bullet.gif) no-repeat left center;} 
08-02 20:02:27.535: D/JSON String(795): form .sep {display:none;}.more {text-align:center;}#ft {padding-top:10px;border-top:1px solid #999;}#ft p {text-align:center;font:78% arial;}
08-02 20:02:27.535: D/JSON String(795): /* end nn4 hide */
08-02 20:02:27.535: D/JSON String(795): </style></head>
08-02 20:02:27.535: D/JSON String(795): <body><div id="doc">
08-02 20:02:27.535: D/JSON String(795): <div id="ygma"><a href="http://us.rd.yahoo.com/404/*http://www.yahoo.com"><img
08-02 20:02:27.535: D/JSON String(795): src=http://l.yimg.com/a/i/yahoo.gif
08-02 20:02:27.535: D/JSON String(795): width=147 height=31 border=0 alt="Yahoo!"></a><div><a
08-02 20:02:27.535: D/JSON String(795): href="http://us.rd.yahoo.com/404/*http://www.yahoo.com">Yahoo!</a>
08-02 20:02:27.535: D/JSON String(795):  - <a href="http://us.rd.yahoo.com/404/*http://help.yahoo.com">Help</a></div></div>
08-02 20:02:27.535: D/JSON String(795): <div id="bd"><h1>Sorry, the page you requested was not found.</h1>
08-02 20:02:27.535: D/JSON String(795): <p>Please check the URL for proper spelling and capitalization. If
08-02 20:02:27.535: D/JSON String(795): you're having trouble locating a destination on Yahoo!, try visiting the
08-02 20:02:27.535: D/JSON String(795): <strong><a
08-02 20:02:27.535: D/JSON String(795): href="http://us.rd.yahoo.com/404/*http://www.yahoo.com">Yahoo! home
08-02 20:02:27.535: D/JSON String(795): page</a></strong> or look through a list of <strong><a
08-02 20:02:27.535: D/JSON String(795): href="http://us.rd.yahoo.com/404/*http://docs.yahoo.com/docs/family/more/">Yahoo!'s
08-02 20:02:27.535: D/JSON String(795): online services</a></strong>. Also, you may find what you're looking for
08-02 20:02:27.535: D/JSON String(795): if you try searching below.</p>
08-02 20:02:27.535: D/JSON String(795): <form name="s1" action="http://us.rd.yahoo.com/404/*-http://search.yahoo.com/search"><fieldset>
08-02 20:02:27.535: D/JSON String(795): <legend><label for="s1p">Search the Web</label></legend>
08-02 20:02:27.535: D/JSON String(795): <input type="text" size=30 name="p" id="s1p" title="enter search terms here">
08-02 20:02:27.535: D/JSON String(795): <input type="submit" value="Search">
08-02 20:02:27.535: D/JSON String(795): <span><a href="http://us.rd.yahoo.com/404/*http://search.yahoo.com/search/options?p=">advanced search</a> <span class=sep>|</span> <a href="http://us.rd.yahoo.com/404/*http://buzz.yahoo.com">most popular</a></span>
08-02 20:02:27.535: D/JSON String(795): </fieldset></form>
08-02 20:02:27.535: D/JSON String(795): <p class="more">Please try <strong><a
08-02 20:02:27.535: D/JSON String(795): href="http://us.rd.yahoo.com/404/*http://help.yahoo.com">Yahoo!
08-02 20:02:27.535: D/JSON String(795): Help Central</a></strong> if you need more assistance.</p>
08-02 20:02:27.535: D/JSON String(795): </div><div id="ft"><p>Copyright &copy; 2013 Yahoo! Inc.
08-02 20:02:27.535: D/JSON String(795): All rights reserved. <a
08-02 20:02:27.535: D/JSON String(795): href="http://us.rd.yahoo.com/404/*http://privacy.yahoo.com">Privacy
08-02 20:02:27.535: D/JSON String(795): Policy</a> - <a
08-02 20:02:27.535: D/JSON String(795): href="http://us.rd.yahoo.com/404/*http://docs.yahoo.com/info/terms/">Terms
08-02 20:02:27.535: D/JSON String(795): of Service</a></p></div>
08-02 20:02:27.535: D/JSON String(795): </div></body></html>

你的网址:

http://answers.yahooapis.com/AnswerService/V1/questionSearch

正确的网址:

http://answers.yahooapis.com/AnswersService/V1/questionSearch

注意差异AnswerService应该是AnswersService 你在这里也有错误:

...&query="+ query +"search...

应该

...&query="+ query +"&search...

因为所有查询参数都必须用&符号分隔。 以下是行动中的网址示例 请注意,您可能需要获取自己的应用ID,因为该ID给了我一个错误。 看起来您正在使用Yahoo提供的演示应用程序ID作为示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM