2016-02-17 42 views
1

我試圖將Instagram的克隆作爲一個項目。我收到了Feed中的圖片,但沒有收到這些視頻。請提出一些方法,我可以解析JSON對象,並將視頻視圖添加到我的Feed中。我不想在應用中播放視頻,但可以提供選項允許用戶下載視頻。Android JSON解析Instagram項目

private void parseJsonFeed(JSONObject response) { 
     try { 
      JSONObject nexturlobj = (JSONObject) response.get("pagination"); 

      nxturl=nexturlobj.getString("next_url"); 


      JSONArray feedArray = response.getJSONArray("data"); 


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


        JSONObject feedObj = (JSONObject) feedArray.get(i); 


        String VideoType = feedObj.getString("type"); 
        String ImageType = feedObj.getString("type"); 
        if (ImageType.equalsIgnoreCase("image")) 
        { 
         JSONObject feedObj2 = (JSONObject) feedObj.get("images"); 
         JSONObject feedObj3 = (JSONObject) feedObj2.get("standard_resolution"); 
         JSONObject feedObj1 = (JSONObject) feedObj.get("user"); 


         FeedItem item = new FeedItem(); 

         item.setId(feedObj1.getInt("id")); 
         item.setName(feedObj1.getString("username")); 
         //item.setStatus(feedObj.getString("tags")); 
         JSONArray tagss = feedObj.getJSONArray("tags"); 

         StringBuilder tags_names = new StringBuilder(""); 
         for (int k = 0; k < tagss.length(); k++) { 
          tags_names.append(" #" 
            + tagss.getString(k)); 
         } 

         item.setStatus(""+tags_names); 

//      // Image might be null sometimes 
         //String image = feedObj3.isNull("image") ? null : feedObj3 
           //.getString("url"); 
         item.setImge(feedObj3.getString("url")); 


         item.setProfilePic(feedObj1.getString("profile_picture")); 

         feedItems.add(item); 
         //Toast.makeText(getActivity(), "new url==fed"+ feedItems.size(), 1).show(); 
//      StringBuilder sb=new StringBuilder(); 
//      sb.append("#"); 
//      for(int I =0; I<feedItems.size(); I++) { 
//       sb.append("#"); 
//       } 
         //return ; 
        item.myurl=new ArrayList<FeedItem>(); 
      }else if (VideoType.equalsIgnoreCase("image")) 
        { 
         JSONObject feedObj2 = (JSONObject) feedObj.get("images"); 
         JSONObject feedObj3 = (JSONObject) feedObj2.get("standard_resolution"); 
         JSONObject feedObj1 = (JSONObject) feedObj.get("user"); 


         FeedItem item = new FeedItem(); 

         item.setId(feedObj1.getInt("id")); 
         item.setName(feedObj1.getString("username")); 
         //item.setStatus(feedObj.getString("tags")); 
         JSONArray tagss = feedObj.getJSONArray("tags"); 

         StringBuilder tags_names = new StringBuilder(""); 
         for (int k = 0; k < tagss.length(); k++) { 
          tags_names.append(" #" 
            + tagss.getString(k)); 
         } 

         item.setStatus(""+tags_names); 

//      // Image might be null sometimes 
         //String image = feedObj3.isNull("image") ? null : feedObj3 
         //.getString("url"); 
         item.setImge(feedObj3.getString("url")); 


         item.setProfilePic(feedObj1.getString("profile_picture")); 

         feedItems.add(item); 
         //Toast.makeText(getActivity(), "new url==fed"+ feedItems.size(), 1).show(); 
//      StringBuilder sb=new StringBuilder(); 
//      sb.append("#"); 
//      for(int I =0; I<feedItems.size(); I++) { 
//       sb.append("#"); 
//       } 
         //return ; 
         item.myurl=new ArrayList<FeedItem>(); 
        } 
       } 
      // notify data changes to list adapater 
      listAdapter.notifyDataSetChanged(); 
      tag_list_pos++; 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 







class FeedListAdapter extends BaseAdapter { 

    FeedItem item; 
    String URL_FEED = ""; 
    private Activity activity; 

    private LayoutInflater inflater; 
    private List<FeedItem> feedItems; 

    // String video; 
    // VideoView mVideoView; 
    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 

FeedList適配器

public FeedListAdapter(Activity activity, List<FeedItem> feedItems) { 
      this.activity = activity; 
      this.feedItems = feedItems; 

     } 

     @Override 
     public int getCount() { 
      return feedItems.size(); 
     } 

     @Override 
     public Object getItem(int location) { 
      return feedItems.get(location); 
     } 

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

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      if (inflater == null) 
       inflater = (LayoutInflater) activity 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      if (convertView == null) 
       convertView = inflater.inflate(R.layout.feed_item, null); 

      if (imageLoader == null) 
       imageLoader = AppController.getInstance().getImageLoader(); 

      TextView name = (TextView) convertView.findViewById(R.id.name); 

      TextView statusMsg = (TextView) convertView 
        .findViewById(R.id.txtStatusMsg); 

      NetworkImageView profilePic = (NetworkImageView) convertView 
        .findViewById(R.id.profilePic); 

      FeedImageView feedImageView = (FeedImageView) convertView 
        .findViewById(R.id.feedImage1); 

      Button btn = (Button) convertView.findViewById(R.id.downloadbtn);//this is used to dpwnload images 

      item = feedItems.get(position); 

      name.setText("" + item.getName()); 

      if (!TextUtils.isEmpty(item.getStatus())) { 
       statusMsg.setText(item.getStatus().trim()); 
       statusMsg.setVisibility(View.VISIBLE); 
      } else { 
       // status is empty, remove from view 
       statusMsg.setVisibility(View.GONE); 
      } 

      // user profile pic 
      if (item.getProfilePic() != null) 
       profilePic.setImageUrl(item.getProfilePic(), imageLoader); 

      // Feed image 
      if (item.getImge() != null) { 
       feedImageView.setImageUrl(item.getImge(), imageLoader); 
       feedImageView.setVisibility(View.VISIBLE); 
       feedImageView.setResponseObserver(new FeedImageView.ResponseObserver() { 
        @Override 
        public void onError() { 
        } 

        @Override 
        public void onSuccess() { 
        } 
       }); 
      } else { 
       feedImageView.setVisibility(View.GONE); 
      } 

      if (position == (feedItems.size() - 1)) { 

    //   URL_FEED = "https://api.instagram.com/v1/tags/" 
    //     + feedItems.get(tag_list_pos) 
    //     + "/media/recent?access_token="+accestok; 
       //URL_FEED = "https://api.instagram.com/v1/media/popular?access_token="+accestok; 
       URL_FEED = nxturl.toString(); 
       //Toast.makeText(getActivity(), "myurl=="+URL_FEED, 1).show(); 
       //Toast.makeText(getActivity(), "new url==fed"+ URL_FEED, 1).show(); 
       // new LoadMoreAsynTask(tagPos).execute(); 
       listview_loadMoredata(URL_FEED); 
      } 
      btn.setTag(position); 
      btn.setOnClickListener(new OnClickListener() { 
       //   
       @Override 
       public void onClick(View v) { 
        pos = (Integer) v.getTag(); 
        cd = new ConnectionDetector(getActivity()); 
        isInternetpresent = cd.isConnectingToInternet(); 
        if (isInternetpresent) { 
         videoURL = feedItems.get(pos).getImge();//this is image url 
         username = feedItems.get(pos).getName(); 
         //Toast.makeText(getActivity(), "hello==="+ videoURL, 1).show(); 
         DownloadAsyTask downlod_video = new DownloadAsyTask(); 
         downlod_video.execute(); 

        } else { 
         alert.showAlertDialog(getActivity(), "Connection Error", 
           "Please check your internet connection.", false); 
        } 
       } 
      }); 


      return convertView; 
     } 

     private void listview_loadMoredata(String url_feed) { 
     } 
    } 




      public void listview_loadMoredata(String URL_FEED) { 

       Cache cache = AppController.getInstance().getRequestQueue().getCache(); 
       Entry entry = cache.get(URL_FEED); 
       if (entry != null) { 
        // fetch the data from cache 
        try { 
         String data = new String(entry.data, "UTF-8"); 
         try { 
          parseJsonFeedLoadMore(new JSONObject(data)); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } catch (UnsupportedEncodingException e) { 
         e.printStackTrace(); 
        } 

       } else { 
        // making fresh volley request and getting json 
        JsonObjectRequest jsonReq = new JsonObjectRequest(Method.GET, 
          URL_FEED, null, new Response.Listener<JSONObject>() { 

         @Override 
         public void onResponse(JSONObject response) { 
          VolleyLog.d("", "Response: " + response.toString()); 
          if (response != null) { 
           parseJsonFeed(response); 
          } 
         } 
        }, new Response.ErrorListener() { 

         @Override 
         public void onErrorResponse(VolleyError error) { 
          VolleyLog.d("", "Error: " + error.getMessage()); 
         } 
        }); 

        // Adding request to volley request queue 
        AppController.getInstance().addToRequestQueue(jsonReq); 
       } 

      } 

      private void parseJsonFeedLoadMore(JSONObject response) { 
       try { 
        JSONArray feedArray = response.getJSONArray("data"); 

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

         JSONObject feedObj = (JSONObject) feedArray.get(i); 

         String videoType = feedObj.getString("type"); 
         if (videoType.equalsIgnoreCase("image")) { 

          JSONObject videoObj = (JSONObject) feedObj.get("videos"); 
          JSONObject videoQlty = (JSONObject) videoObj.get("low_bandwidth"); 


          JSONObject feedObj2 = (JSONObject) feedObj.get("images"); 
          JSONObject feedObj3 = (JSONObject) feedObj2 
            .get("standard_resolution");// standard_resolution 
          // thumbnail 
          JSONObject feedObj1 = (JSONObject) feedObj.get("user"); 
          FeedItem item = new FeedItem(); 
          item.setId(feedObj1.getInt("id")); 
          item.setName("" + feedObj1.getString("username")); 

          JSONArray tagss = feedObj.getJSONArray("tags"); 

          StringBuilder tags_names = new StringBuilder(""); 
          for (int k = 0; k < tagss.length(); k++) { 
           tags_names.append(" #" 
             + tagss.getString(k)); 
          } 

          item.setStatus("" + tags_names); 
          // // Image might be null sometimes 
          // String image = feedObj3.isNull("image") ? null : feedObj3 
          // .getString("url"); 
          item.setImge("" + feedObj3.getString("url")); 
          //item.setVideo(""+videoQlty.getString("url"));//------------ 

          item.setProfilePic("" + feedObj1.getString("profile_picture")); 
          feedItems.add(item); 

          item.myurl.add(item); 
         } 
        } 
        // notify data changes to list adapater 

        listAdapter.notifyDataSetChanged();//---------------- 
        tag_list_pos++; 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 


    } 

回答

0

你似乎可以用排球爲實現這一點,是這樣嗎? Volley允許多部分請求(文件和視頻等),但他們的播放選項必須單獨實現,我認爲。您可以參考Using volley to upload video

如果您希望用戶只下載視頻,請考慮發送視頻鏈接並將其保存在您的JSON文件中。您可以擴展onClick以在單擊特定鏈接時打開瀏覽器。