Json中使用Listview中的问题


Issuses in Using Listview in Json

我的问题是,当我点击列表视图中的项目列表时,将类别id显示为Toast消息。任何人都可以帮助解决这个问题。我很感激谁来解决这个问题?如何在url中只使用一个url获得动态id,但不同的页面将根据json parsing中的id加载?

JSON

{"data":[{"category_id":"1","category_name":"Restaurants"},
{"category_id":"13","category_name":"Electricals & Electronics"},
{"category_id":"14","category_name":"Computers"},
{"category_id":"157","category_name":"Services(service oriented categories)"}

主活动类

public class MainActivity extends ListActivity {
    private static final String url= "http://yoursubshop.com/webservices/categories.php";
    public static final String TAG_DATA = "data";
    public static final String TAG_CATEGORY_ID = "category_id";
    public static final String TAG_CATEGORY_NAME = "category_name";
    ListView lv;
    TextView tv;
    ListAdapter listAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView)findViewById(android.R.id.list);
        tv = (TextView)findViewById(R.id.category_id);
        new GetList().execute();
    }
    private class GetList extends AsyncTask<Void,Void,Void>
    {
        ArrayList<HashMap<String,String>> categorylist;
        ProgressDialog pd;
        @Override
        protected void onPreExecute() {
            pd = ProgressDialog.show(MainActivity.this,null, null, true);
            pd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            pd.show();
        }
        @Override
        protected Void doInBackground(Void... params) {
            WebRequest webRequest = new WebRequest();
            String jsonstr = webRequest.makeWebServiceCall(url,WebRequest.GET_REQUEST);
            Log.d("Response: ", "> " + jsonstr);
            categorylist = parseJSON(jsonstr);
            return null;
        }
        @Override
        protected void onPostExecute(Void s) {
            super.onPostExecute(s);
            pd.dismiss();
             listAdapter= new SimpleAdapter(MainActivity.this,categorylist,R.layout.main,
                    new String[]{TAG_CATEGORY_ID,TAG_CATEGORY_NAME},new int[]{R.id.category_id,R.id.category_name});
            setListAdapter(listAdapter);
            lv.setAdapter(listAdapter);
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id)
                {
                    Toast.makeText(getApplicationContext(),, Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
    private ArrayList<HashMap<String,String>>parseJSON(String jsoon)
    {
        if (jsoon!=null)
        {
            ArrayList<HashMap<String,String>> categorylist = new ArrayList<HashMap<String, String>>();
            try {
                JSONObject jsonObject = new JSONObject(jsoon);
                JSONArray category = jsonObject.getJSONArray(TAG_DATA);
                for (int i=0;i<category.length();i++)
                {
                    JSONObject c = category.getJSONObject(i);
                    String id   = c.getString(TAG_CATEGORY_ID);
                    String name = c.getString(TAG_CATEGORY_NAME);
                    HashMap<String,String> category1 = new HashMap<String,String>();
                    category1.put(TAG_CATEGORY_ID,id);
                    category1.put(TAG_CATEGORY_NAME, name);
                    categorylist.add(category1);
                }
                return categorylist;
            } catch (JSONException e) {
                e.printStackTrace();
                return null;
            }
        }
        else
        {
            Log.e("Servicehandler","No data recieved from HTTP Request");
            return null;
        }
    }
}

Logcat

05-12 17:03:02.351 1198-1198/? E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.ClassCastException: java.util.HashMap cannot be cast to org.json.JSONObject
    at anilkumar.com.yoursubshop.MainActivity$GetList$1.onItemClick(MainActivity.java:82)
    at android.widget.AdapterView.performItemClick(AdapterView.java:292)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1058)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)
    at android.widget.AbsListView.onTouchEvent(AbsListView.java:3180)
    at android.view.View.dispatchTouchEvent(View.java:5541)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1951)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1712)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1912)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1371)
    at android.app.Activity.dispatchTouchEvent(Activity.java:2364)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1860)
    at android.view.View.dispatchPointerEvent(View.java:5721)
    at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2890)
    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2466)
    at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:845)
    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2475)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4424)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

店铺活动

public class Shop extends ListActivity {
    ListAdapter listAdapter;
    String serverUrl = "http://yoursubshop.com/webservices/categories-shop.php?category=";
    String TAG_DATA = "data";
    String TAG_SHOP_ID = "shop_id";
    String TAG_SHOP_NAME = "shop_name";
    int i;
    String dataa;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.shop);
      new GetList().execute();
    }
    private class GetList extends AsyncTask<Void, Void, Void> {
        ArrayList<HashMap<String, String>> shoplist;
        ProgressDialog pd;
        @Override
        protected void onPreExecute() {
            pd = ProgressDialog.show(Shop.this, null, null, true, true);
        }
        @Override
        protected Void doInBackground(Void... params) {
            WebRequest webRequest = new WebRequest();
                String jsonstr = webRequest.makeWebServiceCall(serverUrl, WebRequest.GET_REQUEST);
                Log.d("Response: ", "> " + jsonstr);
                shoplist = parseJSON(jsonstr);
            return null;
        }
        @Override
        protected void onPostExecute(Void s) {
            super.onPostExecute(s);
            pd.dismiss();
            listAdapter = new SimpleAdapter(Shop.this, shoplist, R.layout.shoplayout,
                    new String[]{TAG_SHOP_ID, TAG_SHOP_NAME}, new int[]{R.id.shop_id, R.id.shop_name});
            setListAdapter(listAdapter);
            Intent i = getIntent();
            String serverUrlId = i.getStringExtra("data");
            serverUrl = serverUrl.concat(serverUrlId);
        }
    }
    private ArrayList<HashMap<String, String>> parseJSON(String curl) {
        if (curl != null) {
            ArrayList<HashMap<String, String>> categorylist = new ArrayList<HashMap<String, String>>();
            try {
                JSONObject jsonObject = new JSONObject(curl);
                JSONArray category = jsonObject.getJSONArray(TAG_DATA);
                for (int i = 0; i < category.length(); i++) {
                    JSONObject c = category.getJSONObject(i);
                    String id = c.getString(TAG_SHOP_ID);
                    String name = c.getString(TAG_SHOP_NAME);
                    HashMap<String, String> category1 = new HashMap<String, String>();
                    category1.put(TAG_SHOP_ID, id);
                    category1.put(TAG_SHOP_NAME, name);
                    categorylist.add(category1);
                }
                return categorylist;
            } catch (JSONException e) {
                e.printStackTrace();
                return null;
            }
        } else {
            Log.e("Servicehandler", "No data recieved from HTTP Request");
            return null;
        }
    }
}

onCreate()要定义listview,请单击Listener

 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            Toast.makeText(getApplicationContext(),, Toast.LENGTH_SHORT).show();
        }
    });