2015-06-29 4 views
-2

У меня есть этот JSon данныеAndroid Pass JSON данные другой деятельности

{ 
 
    "Categories": [ 
 
     { 
 
     "description": "", 
 
     "id": 33, 
 
     "name": "News", 
 
     "parent_id": 0, 
 
     "position": 3, 
 
     "published_videos": 953, 
 
     "tag": "news", 
 
     "total_videos": 953 
 
    }, 
 
    { 
 
     "description": "", 
 
     "id": 34, 
 
     "name": "Health", 
 
     "parent_id": 0, 
 
     "position": 22, 
 
     "published_videos": 17, 
 
     "tag": "tena", 
 
     "total_videos": 17 
 
    }, 
 
    { 
 
     "description": "", 
 
     "id": 35, 
 
     "name": "Interview", 
 
     "parent_id": 0, 
 
     "position": 23, 
 
     "published_videos": 271, 
 
     "tag": "qalemeteyeq", 
 
     "total_videos": 271 
 
    }, 
 
    { 
 
     "description": "", 
 
     "id": 36, 
 
     "name": "Trailers", 
 
     "parent_id": 0, 
 
     "position": 21, 
 
     "published_videos": 72, 
 
     "tag": "movie", 
 
     "total_videos": 72 
 
    }, 
 
    { 
 
     "description": "", 
 
     "id": 37, 
 
     "name": "Technology", 
 
     "parent_id": 0, 
 
     "position": 24, 
 
     "published_videos": 17, 
 
     "tag": "technology", 
 
     "total_videos": 17 
 
    }, 
 
    
 
     "description": "", 
 
     "id": 39, 
 
     "name": "International News", 
 
     "parent_id": 33, 
 
     "position": 1, 
 
     "published_videos": 319, 
 
     "tag": "international_news", 
 
     "total_videos": 319 
 
    }, 
 
    
 
    ] 
 
}

И я разобран этот JSon файл и добавить его в панель навигации. В ящике навигации все, что у меня есть, - это имя каждой категории. Когда пользователь нажал на категории, есть еще один json, который я хотел разобрать, который перечисляет элементы в представлении recycler. Например, я использую вот так: http://mydomain/category/id/videos Я хочу заменить идентификатор на тот, который нажал (из json), и получить список предметов из Интернета. Но я не знаю, как получить идентификатор и передать его с намерением. Есть ли какая-то директива по дизайну, которую я должен использовать для решения таких проблем?

private String[] getCategoriesJson(String categoriesJsonStr) 
 
       throws JSONException { 
 
      JSONObject categoriesJSON = new JSONObject(categoriesJsonStr); 
 
      JSONArray categoriesArray = categoriesJSON.getJSONArray("Categories"); 
 
      String[] resultStrs = new String[categoriesArray.length()+1]; 
 
      resultStrs[0] = "Home"; 
 
      for (int i=0; i< categoriesArray.length(); i++){ 
 
       JSONObject category = categoriesArray.getJSONObject(i); 
 
       String name = category.getString("name"); 
 
       Integer categoryId = category.getInt("id"); 
 
       //Integer parentId = category.getInt("parent_id"); 
 
       resultStrs[i+1] = name; 
 
      } 
 
      for (String s: resultStrs){ 
 
       Log.v(LOG_TAG, "Category entry: " + s); 
 
      } 
 

 
      return resultStrs; 
 
     } 
 

 
     @Override 
 
     protected String[] doInBackground(String... params) { 
 
      HttpURLConnection urlConnection = null; 
 
      BufferedReader reader = null; 
 
      String categoriesJsonstr = null; 
 

 
      try { 
 
       URL url = new URL("http://mydomain/categories/"); 
 
       urlConnection = (HttpURLConnection) url.openConnection(); 
 
       urlConnection.setRequestMethod("GET"); 
 
       urlConnection.connect(); 
 

 
       InputStream inputStream = urlConnection.getInputStream(); 
 
       StringBuffer buffer = new StringBuffer(); 
 
       if (inputStream == null) { 
 
        return null; 
 
       } 
 
       reader = new BufferedReader(new InputStreamReader(inputStream)); 
 
       String line; 
 
       while((line = reader.readLine()) != null){ 
 
        buffer.append(line + "\n"); 
 
       } 
 
       if (buffer.length() == 0) { 
 
        return null; 
 
       } 
 
       categoriesJsonstr = buffer.toString(); 
 
       //Log.v(LOG_TAG, "Categories JSON String: " + categoriesJsonstr); 
 
      }catch (IOException e) { 
 
       Log.e(LOG_TAG, "Error", e); 
 
       return null; 
 
      }finally { 
 
       if (urlConnection != null){ 
 
        urlConnection.disconnect(); 
 
       } 
 
       if (reader != null) { 
 
        try { 
 
         reader.close(); 
 
        }catch (final IOException e){ 
 
         Log.e(LOG_TAG, "Error closing stream", e); 
 
        } 
 
       } 
 
      } 
 

 
      try { 
 
       return getCategoriesJson(categoriesJsonstr); 
 
      }catch (JSONException e){ 
 
       Log.e(LOG_TAG, e.getMessage(), e); 
 
       e.printStackTrace(); 
 
      } 
 

 
      return null; 
 
     }

Проблема в том, что я могу получить имя категории, используя findViewById. Но где я должен хранить идентификатор каждой категории?

+2

добавьте ИНТ экстренно ваше намерение с идентификатором в нем: http://developer.android.com/reference/android/content/Intent.html – Onheiron

+0

да, но я новичок, и я хотел бы знать, как получить идентификатор в первую очередь. Нужно ли создавать класс модели? – Caffeinatedwolf

+0

как вы разбираете json, чтобы получить название категории? – Onheiron

ответ

1

попробуйте это. Сначала вы загружаете категории.

private JSONArray categoriesJSONArray = new JSONArray(); 

public class AsyncHttpTaskLoadCategories extends AsyncTask<String, Void, Integer> { 

     @Override 
     protected String[] doInBackground(String... params) { 
      HttpURLConnection urlConnection = null; 
      BufferedReader reader = null; 
      String categoriesJsonstr = null; 

      try { 
       URL url = new URL("http://mydomain/categories/"); 
       urlConnection = (HttpURLConnection) url.openConnection(); 
       urlConnection.setRequestMethod("GET"); 
       urlConnection.connect(); 

       InputStream inputStream = urlConnection.getInputStream(); 
       StringBuffer buffer = new StringBuffer(); 
       if (inputStream == null) { 
        return null; 
       } 
       reader = new BufferedReader(new InputStreamReader(inputStream)); 
       String line; 
       while((line = reader.readLine()) != null){ 
        buffer.append(line + "\n"); 
       } 
       if (buffer.length() == 0) { 
        return null; 
       } 
       categoriesJsonstr = buffer.toString(); 
       //Log.v(LOG_TAG, "Categories JSON String: " + categoriesJsonstr); 

       //create JSONArray 
       categoriesJSONArray = new JSONArray(categoriesJsonstr); 

      }catch (Exception e) { 
       Log.e(LOG_TAG, "Error", e); 
       return null; 
      }finally { 
       if (urlConnection != null){ 
        urlConnection.disconnect(); 
       } 
       if (reader != null) { 
        try { 
         reader.close(); 
        }catch (final IOException e){ 
         Log.e(LOG_TAG, "Error closing stream", e); 
        } 
       } 
      } 

     } 

     @Override 
     protected void onPostExecute(Integer result) { 

      //listView NavDrawer 
      listViewND = (ListView)rootView.findViewById(R.id.list_view_nav_drawer); 
      listViewND.setAdapter(new NavDrawerListAdapter(CONTEXT,categoriesJSONArray)); 
     } 

} 

Тогда нагрузка навигации список ящика

public class NavDrawerListAdapter extends BaseAdapter implements View.OnClickListener{ 

    static class ViewHolder { 
     public int position; 
     public TextView rowCatName; 
    } 

    private Context context; 
    private JSONArray categoriesJSONArray; 

    public NavDrawerListAdapter(Context context, JSONArray categoriesJSONArray){ 
     this.context = context; 
     this.categoriesJSONArray = categoriesJSONArray; 
    } 

    @Override 
    public int getCount() { 
     return categoriesJSONArray.length(); 
    } 

    @Override 
    public Object getItem(int position) {  
     try { 
      return categoriesJSONArray.get(position); 
     }catch(Exception e){ 
      return null; 
     } 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      LayoutInflater mInflater = (LayoutInflater) 
        context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
      convertView = mInflater.inflate(R.layout.drawer_list_item, null); 

      ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.rowCatName = (TextView) convertView.findViewById(R.id.txt_ride_driver_id); 


      convertView.setOnClickListener(this); 
      convertView.setTag(viewHolder); 
     } 

     ViewHolder viewHolder = (ViewHolder)convertView.getTag(); 
     try{ 
      viewHolder.position = position; 
      JSONObject categoriesJSONObj = categoriesJSONArray.getJSONObject(position); 
      //get category neme 
      String name = categoriesJSONObj.getString("name"); 

      viewHolder.rowCatName.setText(name); 


     }catch(Exception e){ 

     } 
     return convertView; 
    } 

    @Override 
    public void onClick(View v) { 
     ViewHolder viewHolder = (ViewHolder)v.getTag(); 
     int position = viewHolder.position; 
     JSONObject categoriesJSONObj = categoriesJSONArray.getJSONObject(position); 
     //get category id 
     int id = categoriesJSONObj.getInt("id"); 

     //put id in Intent 
     //go to next categories 
     //recycler view activity 
     Intent i = new Intent(CONTEXT,CLASS); 
     i.putExtra("ID",id); 
     startActivity(i); 

    } 

} 

Это второй Activity.Inside OnCreate(), получить идентификатор, который был принят в предыдущем умысле.

public class RecyclerViewActivity extends Activity { 

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

     int id = getIntent().getExtras().getInt("id"); 


    } 

} 
Смежные вопросы