我看过SO,但我发现了一个类似的问题,但这对我没有帮助。
我已经构建了我的第一个 Android 应用程序我的应用程序应该播放来自我的 YouTube 频道的视频和一个动态的视频列表我在我的 Android 模拟器中运行该应用程序但是当我在我的应用程序中单击视频缩略图时它会转到 YouTube 主页
我不知道它与模拟器目标有关。
我关注了关于这个的在线教程。
这是Main.java
视频:
/**
* The Activity can retrieve Videos for a specific username from YouTube</br>
* It then displays them into a list including the Thumbnail preview and the title</br>
* There is a reference to each video on YouTube as well but this isn't used in this tutorial</br>
* </br>
* <b>Note<b/> orientation change isn't covered in this tutorial, you will want to override
* onSaveInstanceState() and onRestoreInstanceState() when you come to this
* </br>
* @author paul.blundell
*/
public class maincontentview extends Activity implements VideoClickListener {
// A reference to our list that will hold the video details
private VideosListView listView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.maincontentview);
listView = (VideosListView) findViewById(R.id.videosListView);
listView.setOnVideoClickListener(this);
}
// This is the XML onClick listener to retreive a users video feed
public void getUserYouTubeFeed(View v){
// We start a new task that does its work on its own thread
// We pass in a handler that will be called when the task has finished
// We also pass in the name of the user we are searching YouTube for
new GetYouTubeUserVideosTask(responseHandler, "projectofdawah").run();
}
// This is the handler that receives the response when the YouTube task has finished
Handler responseHandler = new Handler() {
public void handleMessage(Message msg) {
populateListWithVideos(msg);
};
};
/**
* This method retrieves the Library of videos from the task and passes them to our ListView
* @param msg
*/
private void populateListWithVideos(Message msg) {
// Retreive the videos are task found from the data bundle sent back
Library lib = (Library) msg.getData().get(GetYouTubeUserVideosTask.LIBRARY);
// Because we have created a custom ListView we don't have to worry about setting the adapter in the activity
// we can just call our custom method with the list of items we want to display
listView.setVideos(lib.getVideos());
}
@Override
protected void onStop() {
// Make sure we null our handler when the activity has stopped
// because who cares if we get a callback once the activity has stopped? not me!
responseHandler = null;
super.onStop();
}
// This is the interface method that is called when a video in the listview is clicked!
// The interface is a contract between this activity and the listview
@Override
public void onVideoClicked(com.mohammed.watzIslam.Video video) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(video.getUrl()));
startActivity(intent);
}
}
这是视频java文件
package com.mohammed.watzIslam;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore.Video;
import android.view.View;
/**
* The Activity can retrieve Videos for a specific username from YouTube</br>
* It then displays them into a list including the Thumbnail preview and the title</br>
* There is a reference to each video on YouTube as well but this isn't used in this tutorial</br>
* </br>
* <b>Note<b/> orientation change isn't covered in this tutorial, you will want to override
* onSaveInstanceState() and onRestoreInstanceState() when you come to this
* </br>
*/
public class maincontentview extends Activity implements VideoClickListener {
// A reference to our list that will hold the video details
private VideosListView listView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.maincontentview);
listView = (VideosListView) findViewById(R.id.videosListView);
listView.setOnVideoClickListener(this);
}
// This is the XML onClick listener to retreive a users video feed
public void getUserYouTubeFeed(View v){
// We start a new task that does its work on its own thread
// We pass in a handler that will be called when the task has finished
// We also pass in the name of the user we are searching YouTube for
new GetYouTubeUserVideosTask(responseHandler, "projectofdawah").run();
}
// This is the handler that receives the response when the YouTube task has finished
Handler responseHandler = new Handler() {
public void handleMessage(Message msg) {
populateListWithVideos(msg);
};
};
/**
* This method retrieves the Library of videos from the task and passes them to our ListView
* @param msg
*/
private void populateListWithVideos(Message msg) {
// Retreive the videos are task found from the data bundle sent back
Library lib = (Library) msg.getData().get(GetYouTubeUserVideosTask.LIBRARY);
// Because we have created a custom ListView we don't have to worry about setting the adapter in the activity
// we can just call our custom method with the list of items we want to display
listView.setVideos(lib.getVideos());
}
@Override
protected void onStop() {
// Make sure we null our handler when the activity has stopped
// because who cares if we get a callback once the activity has stopped? not me!
responseHandler = null;
super.onStop();
}
// This is the interface method that is called when a video in the listview is clicked!
// The interface is a contract between this activity and the listview
@Override
public void onVideoClicked(com.mohammed.watzIslam.Video video) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(video.getUrl()));
startActivity(intent);
}
}
这是一个视频 listview.java
package com.mohammed.watzIslam;
import java.util.List;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
public class VideosListView extends ListView implements android.widget.AdapterView.OnItemClickListener {
private List<Video> videos;
private VideoClickListener videoClickListener;
public VideosListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public VideosListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public VideosListView(Context context) {
super(context);
}
public void setVideos(List<Video> videos){
this.videos = videos;
VideosAdapter adapter = new VideosAdapter(getContext(), videos);
setAdapter(adapter);
// When the videos are set we also set an item click listener to the list
// this will callback to our custom list whenever an item it pressed
// it will tell us what position in the list is pressed
setOnItemClickListener(this);
}
// Calling this method sets a listener to the list
// Whatever class is passed in will be notified when the list is pressed
// (The class that is passed in just has to 'implement VideoClickListener'
// meaning is has the methods available we want to call)
public void setOnVideoClickListener(VideoClickListener l) {
videoClickListener = l;}
@Override
public void setAdapter(ListAdapter adapter) {
super.setAdapter(adapter);
}
// When we receive a notification that a list item was pressed
// we check to see if a video listener has been set
// if it has we can then tell the listener 'hey a video has just been clicked' also passing the video
@Override
public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
if(videoClickListener != null){
videoClickListener.onVideoClicked(videos.get(position));
}
}
}
日志猫
05-09 09:10:58.080: I/Choreographer(914): Skipped 64 frames! The application may be doing too much work on its main thread.
05-09 09:11:33.139: E/Trace(968): error opening trace file: No such file or directory (2)
05-09 09:11:34.219: D/dalvikvm(968): GC_FOR_ALLOC freed 48K, 3% free 8014K/8259K, paused 81ms, total 83ms
05-09 09:11:34.269: I/dalvikvm-heap(968): Grow heap (frag case) to 8.977MB for 1156016-byte allocation
05-09 09:11:34.459: D/dalvikvm(968): GC_CONCURRENT freed 1K, 3% free 9142K/9415K, paused 82ms+30ms, total 186ms
05-09 09:11:35.400: D/gralloc_goldfish(968): Emulator without GPU emulation detected.
05-09 09:11:38.101: D/dalvikvm(968): GC_CONCURRENT freed 19K, 2% free 9572K/9735K, paused 94ms+109ms, total 311ms
05-09 09:11:38.740: I/Choreographer(968): Skipped 141 frames! The application may be doing too much work on its main thread.
05-09 09:11:39.490: I/Choreographer(968): Skipped 98 frames! The application may be doing too much work on its main thread.
05-09 09:11:41.310: I/Choreographer(968): Skipped 32 frames! The application may be doing too much work on its main thread.
05-09 09:11:42.190: I/Choreographer(968): Skipped 30 frames! The application may be doing too much work on its main thread.
05-09 09:11:51.540: I/Choreographer(968): Skipped 38 frames! The application may be doing too much work on its main thread.
05-09 09:11:51.850: I/Choreographer(968): Skipped 55 frames! The application may be doing too much work on its main thread.
05-09 09:11:58.519: D/Button(968): Login
05-09 09:11:59.860: E/JSON(968): {"tag":"login","success":1,"error":0,"id":"518a7c7904eda1.69983308","user":{"name":"a","email":"a","created_at":"2013-05-09 00:25:29","updated_at":null}}
05-09 09:12:02.620: I/Choreographer(968): Skipped 35 frames! The application may be doing too much work on its main thread.
05-09 09:12:10.931: D/dalvikvm(968): GC_CONCURRENT freed 197K, 3% free 9837K/10119K, paused 74ms+91ms, total 273ms
05-09 09:12:15.679: I/Choreographer(968): Skipped 38 frames! The application may be doing too much work on its main thread.
05-09 09:12:17.450: I/Choreographer(968): Skipped 76 frames! The application may be doing too much work on its main thread.
05-09 09:12:17.651: I/Choreographer(968): Skipped 39 frames! The application may be doing too much work on its main thread.
05-09 09:12:22.071: I/System.out(968): https://www.youtube.com/watch?v=hBiyaXMVM90&feature=youtube_gdata_player
05-09 09:12:22.071: I/System.out(968): https://www.youtube.com/watch?v=hBiyaXMVM90&feature=youtube_gdata_player
05-09 09:12:22.630: D/dalvikvm(968): GC_CONCURRENT freed 1603K, 17% free 8807K/10503K, paused 87ms+83ms, total 259ms
05-09 09:12:22.630: D/dalvikvm(968): WAIT_FOR_CONCURRENT_GC blocked 31ms
05-09 09:12:23.470: I/System.out(968): URL :- hBiyaXMVM90
05-09 09:12:23.590: I/Choreographer(968): Skipped 339 frames! The application may be doing too much work on its main thread.
05-09 09:12:24.561: D/MediaPlayer(968): Couldn't open file on client side, trying server side
05-09 09:12:24.931: I/Choreographer(968): Skipped 304 frames! The application may be doing too much work on its main thread.
05-09 09:12:25.450: D/MediaPlayer(968): getMetadata
05-09 09:12:25.591: I/Choreographer(968): Skipped 37 frames! The application may be doing too much work on its main thread.
05-09 09:12:31.744: E/MediaPlayer(968): error (1, -2147483648)
05-09 09:12:31.744: E/MediaPlayer(968): Error (1,-2147483648)
05-09 09:12:31.750: D/VideoView(968): Error: 1,-2147483648
05-09 09:12:32.140: I/Choreographer(968): Skipped 59 frames! The application may be doing too much work on its main thread.
05-09 09:12:33.560: I/Choreographer(968): Skipped 59 frames! The application may be doing too much work on its main thread.
希望能得到你们的帮助