1

I'm trying to make a clone of Instagram as a project. I get the images in my feed but not the videos.Please suggest some ways I can parse JSON object and make the video views to include the videos in my feed.I don't want to play the video in the app but provide the option of allowing the user to download the video.

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 Adapter

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();
                }
            }
        }


    }
hushan
  • 63
  • 5

1 Answers1

0

You seem to be using Volley for achieving this, is it so? Volley allows multipart request (for files and videos and the like) however their playback option has to be achieved separately I think. You can check out Using volley to upload video as a reference.

If you want users to just download the video, consider sending the video link and saving it in your JSON file. You can extend onClick to open the browser when a particular link is clicked.

Community
  • 1
  • 1
Aditya Pan
  • 77
  • 1
  • 11