解決策を見つけようとしましたが、私は2つのクラスを持っていませんでした.1つはsysnctaskクラスで、ビデオファイルをダウンロードしてもうまく動作します。 //コードボタンをクリックしてボタン内のメソッドを呼び出すと、その値が使用されます
public class DownloadFileAsync extends AsyncTask<String, String, String> {
private Context context;
public DownloadFileAsync(Context context)
{
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
protected String doInBackground(String... f_url) {
int count;
try {
URL url = new URL(f_url[0]);
URLConnection conection = url.openConnection();
conection.connect();
int lenghtOfFile = conection.getContentLength();
// download the file
InputStream input = new BufferedInputStream(url.openStream(), 8192);
Dominika_details dominika_details= new Dominika_details();
// Output stream
OutputStream output = new FileOutputStream("/sdcard/"+YOUTUBE_ID);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
// writing data to file
output.write(data, 0, count);
}
// flushing output
output.flush();
// closing streams
output.close();
input.close();
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}
return null;
}
protected void onProgressUpdate(String... progress) {
// setting progress percentage
}
@Override
protected void onPostExecute(String file_url) {
// dismiss the dialog after the file was downloaded
}
}
第一方がダウンロード形式
//コード
public class GetYoutubeUrl extends AppCompatActivity {
private static final String YOUTUBE_ID = "3LiubyYpEUk";
private final YouTubeExtractor mExtractor = YouTubeExtractor.create();
private Callback<YouTubeExtractionResult> mExtractionCallback = new Callback<YouTubeExtractionResult>() {
@Override
public void onResponse(Call<YouTubeExtractionResult> call, Response<YouTubeExtractionResult> response) {
bindVideoResult(response.body());
}
@Override
public void onFailure(Call<YouTubeExtractionResult> call, Throwable t) {
onError(t);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_get_youtube_url);
mExtractor.extract(YOUTUBE_ID).enqueue(mExtractionCallback);
Button download= (Button)findViewById(R.id.download);
download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
private void onError(Throwable t) {
t.printStackTrace();
Toast.makeText(GetYoutubeUrl.this, "It failed to extract. So sad", Toast.LENGTH_SHORT).show();
}
private void bindVideoResult(YouTubeExtractionResult result) {
/// Here you can get download url link
String video= String.valueOf(result.getSd360VideoUri());
new DownloadFileAsync(this).execute(video);
}
にユーチューブ動画IDを変換活性 "GetYoutubeUrl" であります}
GetYoutubeUrlアクティビティのbindVideoResultメソッドでは、asynctaskクラスを呼び出すことができ、入力として "String video"値を使用してビデオを非常に細かくダウンロードできます。 私が達成したいことは二つのものされていますbindVideoResult方法から
- GetYoutubeUrlアクティビティでclicklistener上のダウンロードボタンがあるので、どのように私はそれ 内asynctaskクラスを呼び出すことができ、その値を使用し、「ビデオ」というように私ボタンをクリックしたときにのみ、このビデオファイルをダウンロードできます。 2.How私がダウンロードしたファイル名として、すべてのビデオIDを割り当てることができます
?、私はGetYoutubeUrl活動に意味ID「YOUTUBE_IDは」
を導入どこので、どのように私はasyntask」のOutputStream出力に名前を取ることができています=新しいFileOutputStream( "/ sdcard /" + YOUTUBE_ID); "
// logcat
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41ebd9c0)
E/AndroidRuntime: FATAL EXCEPTION: main
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:650)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:281)
at com.fredycom.myyoutube.DownloadFileAsync.onPreExecute(DownloadFileAsync.java:41)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
at android.os.AsyncTask.execute(AsyncTask.java:534)
at com.fredycom.myyoutube.GetYoutubeUrl$2.onClick(GetYoutubeUrl.java:43)
at android.view.View.performClick(View.java:4212)
at android.view.View$PerformClick.run(View.java:17476)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5371)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
I /プロセス:送信信号。 PID:21771 SIG:9 アプリケーションが終了しました。
私は新しいDownloadFileAsync(これ、YOUTUBE_ID).excute(ビデオ)を導入しています。クリックリスナーの側にあり、DownloadFileAsync(Mainactivity.this、YOUTUBE_ID).excute(video);のように変更します。このログキャストエラーで閉じるようにしたとき@Wizard –
そして?問題は解決しましたか? – Wizard
@ F.joel皆さんのご質問にerrorcatのコードを追加してください! – Wizard