>我正在尝试将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 以在单击特定链接时打开浏览器。