java - Json Web服务数据检索

标签 java android json web-services events

如何检索 Android 的 JSON Web 服务数据?我目前正在尝试以 JSON 格式检索事件数据并显示它,但我不太确定应该如何做。但不知何故,我无法在我的移动应用程序中运行。这是我的代码示例:

package com.androidhive.jsonparsing;

import java.util.ArrayList;
import java.util.HashMap;

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

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class AndroidJSONParsingActivity extends ListActivity {

    // url to make request
    private static String url = "http://api.eventful.com/json/events/get?app_key=rDkKF6nSx6LjWTDR&id=E0-001-000324672-7";

    // JSON Node names
    private static final String TAG_ID = "id";
    private static final String TAG_REGION = "region";
    private static final String TAG_STARTTIME = "start_time";
    private static final String TAG_TITLE = "title";
    private static final String TAG_CITY = "city";
    private static final String TAG_VENUE_NAME = "venue_name";

    // contacts JSONArray
    JSONArray id;

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

        // Hashmap for ListView
        ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();

        // Creating JSON Parser instance
        JSONParser jParser = new JSONParser();

        // getting JSON string from URL
        JSONObject json = jParser.getJSONFromUrl(url);

        try {
            // Getting Array of Contacts
            id = json.getJSONArray(TAG_ID);

            // looping through All Contacts
            for (int i = 0; i < id.length(); i++) {
                JSONObject c = id.getJSONObject(i);

                // Storing each json item in variable
                String mid = c.getString(TAG_ID);
                String region = c.getString(TAG_REGION);
                String starttime = c.getString(TAG_STARTTIME);
                String mtitle = c.getString(TAG_TITLE);
                String city = c.getString(TAG_CITY);
                String venuename = c.getString(TAG_VENUE_NAME);

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

                // adding each child node to HashMap key => value
                map.put(TAG_ID, mid);
                map.put(TAG_REGION, region);
                map.put(TAG_STARTTIME, starttime);
                map.put(TAG_TITLE, mtitle);
                map.put(TAG_CITY, city);
                map.put(TAG_VENUE_NAME, venuename);

                // adding HashList to ArrayList
                contactList.add(map);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        /**
         * Updating parsed JSON data into ListView
         * */
        ListAdapter adapter = new SimpleAdapter(this, contactList,
                R.layout.list_item, new String[] { TAG_TITLE },
                new int[] { R.id.mtitle });

        setListAdapter(adapter);

        // selecting single ListView item
        ListView lv = getListView();

        // Launching new screen on Selecting Single ListItem
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // getting values from selected ListItem
                String name = ((TextView) view.findViewById(R.id.mtitle))
                        .getText().toString();

                // Starting new intent
                Intent in = new Intent(getApplicationContext(),
                        SingleMenuItemActivity.class);
                in.putExtra(TAG_TITLE, name);


            }
        });

    }

}

根据要求,这是我的 JSONParser 示例代码:

package com.androidhive.jsonparsing;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            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 parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

最佳答案

因此,如果 String strJson 是从 HTTP 请求接收到的结果字符串,必须将其填充到 ListView 中,那么:-

JSONObject strJsonObj = new JSONObject(strJson);
Listview listContent = getListFromJson(strJsonObj);

并从 strJsonObj 创建一个 JSON 数组,例如:

JSONArray resultantArray = strJsonObj.getJSONArray("resultantTag");

创建一个循环来遍历 JsonArray 为每次遍历创建 Json 对象:

for(int i=0; i<searchResultArray.length(); i++){
      JSONObject objAtI = (JSONObject) resultantArray.get(i);
      objAtI.get("xyz").toString();
      objAtI.get("abc").toString();
}

就是这样。

关于java - Json Web服务数据检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17564197/

相关文章:

java - 如何在 Java 中找到年月日中的两个日期之间的差异?

java - 如何将负数格式化为括号?

android - 使用全屏主题时,React Native 'Modal' 组件未覆盖 Android 上的整个屏幕

javascript - 从 JSON 数组中抓取并打印特定对象 - Javascript

javascript - JSON.parse 错误,键中包含美元

java - 在 OpenGL (Java) 中实现 LOD

java - Spring 和neo4j : Previous relationships are deleted when adding new ones

java - 在一个类中设置一个值并从另一个类中检索 Java(Android 应用程序)

java - 如何使用套接字编程在Android中测量数据包丢失?

c++ - 修复错误的 JSON 数据