dongliao1948 2016-05-12 10:52
浏览 88

在Json中使用Listview的问题

My issue is when I am click on list of items on list view then Display Category id as a Toast Message.any one can help to solve this issue. I am appreciating who solve this problem? And how to get dynamic id in url with only using one url but different page will be load depends upon id in json parsing?

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)"}

MainActivity Class

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)

Shop Activity

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;
        }
    }
}
  • 写回答

1条回答 默认 最新

  • dreamone5156 2016-05-12 11:05
    关注

    onCreate() to define listview click 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();
            }
        });
    
    评论

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c