如何使用JSON在Android中使用ID匹配数据?

时间:2016-07-03 02:04:34

标签: android json android-fragments

我有两个fragments,一个显示节目列表,一个显示课程列表。如何从mainactivity中获取所选程序以仅显示相应的课程说明?它们按ID匹配。目前,当我点击一个程序时,整个课程列表显示而不是相应的课程。

MainActivity片段(显示JSON file中的所有数据):

ProgramAdapter programAdapter;

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

        ProgramDetail item = (ProgramDetail) getListAdapter().getItem(position);

        Intent intent = new Intent(getActivity(), ProgramDetailActivity.class);

        intent.putExtra(ProgramDetailActivity.EXTRA_ID, item.getId());

        startActivity(intent);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    programAdapter = new ProgramAdapter(getActivity());

    setListAdapter(programAdapter);

    setListShown(false);

    new HttpAsyncTask().execute("https://gist.githubusercontent.com/kdotzenrod517/39bc7372759c762e33188fb1a6cbce5d/raw/a2baa28d19fd597be999c8fddb6b48c888cd33f4/gistfile1.txt");
}



 private class HttpAsyncTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {

            Log.e("HttpAsyncTask", "doInBackground");

            String result = "";
            HttpURLConnection urlConnection = null;
            try{
                URL url = new URL(params[0]);
                Log.e("HttpAsyncTask", params[0]);
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestProperty("Accept", "application/json");
                InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());
                Log.e("HttpAsyncTask", "getInputStream");
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

                String s = "";

                while ((s = reader.readLine()) != null){
                    result += s;
                    Log.e("HttpAsyncTask", result);
                }

            } catch (Exception e){
                Log.e("HttpAsyncTask", "EXCEPTION: " + e.getMessage());
            } finally {
                if (urlConnection != null){
                    urlConnection.disconnect();
                }
            }

            return result;
        }

        @Override
        protected void onPostExecute(String s) {
            Log.e("HttpAsyncTask", "entering onPostExecute");

            try {
                JSONArray jsonArray = new JSONArray(s);
                final int length = jsonArray.length();
                Log.i("HttpAsyncTask", "Number" + length);

                List<ProgramDetail> items = new ArrayList<>();

                for (int i=0; i < length; i++){
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    items.add(new ProgramDetail(jsonObject.getString("name"),null,jsonObject.getLong("id")));
                }

                programAdapter.addAll(items);

                programAdapter.notifyDataSetChanged();

                setListShown(true);

            } catch (JSONException e) {


        }


        }
    }
}

CourseList Fragment(应该只显示ID匹配的JSON数据) `

protected void onPostExecute(String s) {
        Log.e("HttpAsyncTask", "entering onPostExecute");

        try {
            JSONArray jsonArray = new JSONArray(s);
            final int length = jsonArray.length();
            Log.i("HttpAsyncTask", "Number" + length);

            List<ProgramDetail> item = new ArrayList<>();

            for (int i=0; i < length; i++){


                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    item.add(new ProgramDetail(jsonObject.getString("name"), null, jsonObject.getLong("id")));


            }

            programAdapter.addAll(item);

            programAdapter.notifyDataSetChanged();

            setListShown(true);

        } catch (JSONException e) {


        }

节目单

   [
    { 
        "id": "0",
        "name": "Intro to Android"
    },
    { 
        "id": "1",
        "name": "Advanced Android"
    },
    { 
        "id": "2",
        "name": "Intro to Java"
    },
    { 
        "id": "3",
        "name": "Advanced Java"
    },
    { 
        "id": "4",
        "name": "Intro to Data Science"
    }
]

课程列表JSON

{ 
    "id": "0",
    "name": "Welcome to Android!"
},
{ 
    "id": "1",
    "name": "Enterprise level Android Dev"
},
{ 
    "id": "2",
    "name": "Welcome to Java!"
},
{ 
    "id": "3",
    "name": "Enterprise Level Java"
},
{ 
    "id": "4",
    "name": "Welcome to Data Science!"
}

0 个答案:

没有答案