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 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算