【问题标题】:How do I display the JSON results from UrbanDictionary in my app?如何在我的应用程序中显示来自 UrbanDictionary 的 JSON 结果?
【发布时间】:2012-11-25 04:21:30
【问题描述】:

我正在开发一个应用程序,该应用程序只需访问 UrbanDictionary 并以 JSON 格式返回单词搜索结果...然后将其显示在 Android 项目中。

这是我的完整代码:

package org.twodee.mitchemc.webapi;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ListActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends ListActivity {
    private ArrayList<String> definitionsList;
    private ArrayAdapter<String> adapter;
    private EditText wordText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        wordText = (EditText) findViewById(R.id.wordText);
        Button defineButton = (Button) findViewById(R.id.defineButton);

        definitionsList = new ArrayList<String>();
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, definitionsList);
        setListAdapter(adapter);

        defineButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String word = wordText.getText().toString();
                new DownloadTask().execute(word);
            }
        });
    }

    private ArrayList<String> getDefs(String word) {
        ArrayList<String> definitions = new ArrayList<String>();
        try {
            URL url = new URL("http://api.urbandictionary.com/v0/define?term="
                    + word);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            InputStream in = connection.getInputStream();

            String json = Utilities.slurp(in);
            Log.d("FOO", json);

            JSONArray array = new JSONArray(json);

            for (int i = 0; i < array.length(); ++i) {
                JSONObject object = array.getJSONObject(i);
                definitions.add(object.getString("definition"));
            }

            in.close();
        } catch (MalformedURLException e) {
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return definitions;
    }

    class DownloadTask extends AsyncTask<String, Void, ArrayList<String>> {

        @Override
        protected ArrayList<String> doInBackground(String... params) {
            String word = params[0];
            return getDefs(word);
        }

        @Override
        protected void onPostExecute(ArrayList<String> defs) {
            super.onPostExecute(defs);

            definitionsList.clear();
            definitionsList.addAll(defs);
            adapter.notifyDataSetChanged();
        }

    }

}

不要注意幕后的 Utilities.slurp。

所以,如果我运行它,它不会崩溃,而且它确实会给我结果,但它会将它们扔到 LogCat...而不是我的应用程序中。我之前发现了以下异常:

of type org.json.jsonarray cannot be converted to jsonobject

我浏览了这个论坛,发现我在一个数组(或类似的东西)中有对象,但我不知道如何在代码中反映这一点。

我希望你在应用程序中输入,比如说“嘿”,点击“定义”,然后在它下面有一个定义列表。只有定义......所以它的JSON部分应该是“定义”

这是我在 LogCat 中获得的一些 JSON 输出。我希望这是可读的:

12-06 19:00:57.647: W/System.err(1400): org.json.JSONException: Value {"total":32,"result_type":"exact","list":[{"thumbs_down":428,"author":"D.B. Echo","definition":"A contraction for \"Hello, I find you attractive and would like to dance with you, share some drinks with you, and then perhaps have sex with you.  Nothing serious, of course, and I doubt that this will result in a long term relationship, but I would appeciate you considering my proposal.\"","permalink":"http:\/\/hey.urbanup.com\/1099714","thumbs_up":1530,"word":"hey","current_vote":"","example":"Guy at bar to attractive girl: \"Hey.\"\r\n\r\nAttractive girl to guy: \"Go to hell, creep.\" (Moves to other side of bar.)","defid":1099714},{"thumbs_down":250,"author":"Erica","definition":"hey is a way to say \"hi\" or \"what's up\"\r\nthe type of 'hey' horses eat is hAy you morons!!!","permalink":"http:\/\/hey.urbanup.com\/574637","thumbs_up":541,"word":"Hey","current_vote":"","example":"hey what's up!?!\r\nhorses eat hay!","defid":574637},{"thumbs_down":144,"author":"SoMe RaNdOm PeRsOn","definition":"I word to use to get someone's attention. Even if you don't know the persons name by simply saying \"hey\" you can easily get their attention","permalink":"http:\/\/hey.urbanup.com\/1106278","thumbs_up":294,"word":"hey","current_vote":"","example":"guy 1:Hey Alex what's that guys name over there?\r\nAlex: How the hell should I know?\r\nGuy 1: Hey!!\r\nMystery guy: ::looks around confused::\r\nGuy 1: O hi.","defid":1106278},{"thumbs_down":120,"author":"Jamesrob92","definition":"1. The most informal form of greeting. Usually used in a friendly manner or to sound cool and relaxed.\r\n2. An exclamation used to get someone's attention","permalink":"http:\/\/hey.urbanup.com\/2153666","thumbs_up":249,"word":"hey","current_vote":"","example":"1. Hey, what's up?\r\n2. HEY! Wait for me!\r\n3. HEY YOU! Get away from my wife!","defid":2153666},{"thumbs_down":133,"author":"marshmallow","definition":"a slang term used by many people in place of hello","permalink":"http:\/\/hey.urbanup.com\/1129122","thumbs_up":219,"word":"hey","current_vote":"","example":"Hey Ma...whats crackin?","defid":1129122},{"thumbs_down":79,"author":"hey malasadas","definition":"an expression used to get someone's attention","permalink":"http:\/\/hey.urbanup.com\/198491","thumbs_up":128,"word":"hey","current_vote":"","example":"hey man, what the hell are you doing?!","defid":198491},{"thumbs_down":54,"author":"HappyGirl1993","definition":"Considered to be a lot more flirtatious than 'hello' or 'hi.'","permalink":"http:\/\/hey.urbanup.com\/5302185","thumbs_up":68,"word":"Hey","current_vote":"","example":"Example...\n\nGuy: Hey.\r\nGirl: Hi.\r\nGuy: *Whoa, total FAIL!*","defid":5302185},{"thumbs_down":37,"author":"Eric Klein...","definition":"1. Interjection, an informal greeting. \r\n\r\n2. Verb, to 'hey' someone.  The act of driving down public roads in a lane near a sidewalk, coming upon an unsuspecting pedestrian, and hollering \"HEY!\" as loudly as possible in their general direction.  Most effective if done with all windows rolled down, and all members of the vehicle participating. (Originating in Sioux Falls, SD)","permalink":"http:\/\/hey.urbanup.com\/2705914","thumbs_up":42,"word":"Hey","current_vote":"","example":"1. \"Hey buddy, how's the syphilis?\"\r\n\r\n2. \"Jimmy and I heyed a kid so bad the other day, he fell off his bike!\"","defid":2705914},{"thumbs_down":80,"author":"J-Lib","definition":"a slang interjection or prompt often used in place of \"eh\" or \"right\" in order to make a sentence into a question; used in parts of Canada","permalink":"http:\/\/hey.urbanup.com\/1262450","thumbs_up":67,"word":"hey","current_vote":"","example":"It's supposed to snow tomorrow, hey?\r\nThat guy was pretty attractive, hey?","defid":1262450},{"thumbs_down":7,"author":"Bam Bam Branson","definition":"Why would you even search this?","permalink":"http:\/\/hey.urbanup.com\/5850424","thumbs_up":8,"word":"Hey","current_vote":"","example":"Hey is Idk","defid":5850424}],"pages":4,"sounds":["http:\/\/media.urbandictiona

任何帮助将不胜感激!提前致谢!

更新:这是有效的代码:

                String json = Utilities.slurp(in);
            JSONObject jsonObject = new JSONObject(json);
            JSONArray array = jsonObject.getJSONArray("list");

            for (int i = 0; i < array.length(); ++i) {
                JSONObject object = array.getJSONObject(i);
                definitions.add(object.getString("definition"));
            }

【问题讨论】:

    标签: android json api jsonexception


    【解决方案1】:

    根据您从该请求返回的 json,您设置的 JSONObject 错误。以下是返回的 json 示例:

    {
        "has_related_words": true,
        "result_type": "exact",
        "list": [
            {
                "defid": 2957653,
                "word": "test",
                "author": "sm1g",
                "permalink": "http://test.urbanup.com/2957653",
                "definition": "To check if something coresponds the promised result or what effect does it have at all.",
                "example": "By typing in the word \"test\" you prolly tried to search if there was a definition for this word.",
                "thumbs_up": 123,
                "thumbs_down": 46,
                "current_vote": ""
            }
    ],
        "sounds": [
            "http://media.urbandictionary.com/sound/test-8076.mp3"
        ],
        "total": 20,
        "pages": 2
    }
    

    在您的代码中,要获取像 list 这样的数组,您需要这样做:

    String json = Utilities.slurp(in);
    JSONObject jsonObject = new JSONObject(json);
    
    //now get the list array
    JSONArray list = new JSONArray(jsonObject.getArray("list"));
    

    方法名称可能不准确。

    【讨论】:

    • 效果很好!我已经更新了我的问题,以反映我对您的解决方案所做的细微更改以使用我的代码!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2013-01-27
    • 1970-01-01
    • 2021-12-03
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多