Android JSON 解析 Instagram 项目



>我正在尝试将Instagram作为一个项目的克隆。我在提要中获取图像,但没有获得视频。请提出一些可以解析 JSON 对象并使视频视图包含在我的提要中的视频的方法。我不想在应用程序中播放视频,但提供了允许用户下载视频的选项。

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

馈送列表适配器

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

    }

您似乎正在使用 Volley 来实现这一点,是这样吗?Volley 允许多部分请求(用于文件和视频等(,但我认为它们的播放选项必须单独实现。您可以查看使用凌空抽射上传视频作为参考。

如果希望用户只下载视频,请考虑发送视频链接并将其保存在 JSON 文件中。您可以扩展 onClick 以在单击特定链接时打开浏览器。

最新更新