私はvolleyライブラリを使用してビデオをダウンロードしたいと思います。私は、アプリケーション内のすべてのネットワークコールに対して、volleyライブラリを使用しています。アンドロイドでvolleyを使ってビデオファイルをダウンロードする方法は?
答えて
Volleyライブラリは廃止されていますので、Volleyライブラリは使用しないでください。
Volleyの最善の選択肢は、RetroFitライブラリです。
非同期タスクを使用してビデオファイルをダウンロードできます。
バレーは降格されていません。 Apache HTTPクライアントは、Volleyの使用は控えめです。私はそれを知らないので、ボレーは負担になります。私のGoogle検索ではそれが確認されなかった。そしてAsyncTaskは、特にビデオダウンロードのような重い仕事のために、ネットワークのためのひどい考えです。 – Sermilion
まずあなたのような独自のカスタムリクエストクラスを作成する必要があり、
class InputStreamVolleyRequest extends Request<byte[]> {
private final Response.Listener<byte[]> mListener;
private Map<String, String> mParams;
//create a static map for directly accessing headers
public Map<String, String> responseHeaders ;
public InputStreamVolleyRequest(int method, String mUrl ,Response.Listener<byte[]> listener,
Response.ErrorListener errorListener, HashMap<String, String> params) {
// TODO Auto-generated constructor stub
super(post, mUrl, errorListener);
// this request would never use cache.
setShouldCache(false);
mListener = listener;
mParams=params;
}
@Override
protected Map<String, String> getParams()
throws com.android.volley.AuthFailureError {
return mParams;
};
@Override
protected void deliverResponse(byte[] response) {
mListener.onResponse(response);
}
@Override
protected Response<byte[]> parseNetworkResponse(NetworkResponse response) {
//Initialise local responseHeaders map with response headers received
responseHeaders = response.headers;
//Pass the response data here
return Response.success(response.data, HttpHeaderParser.parseCacheHeaders(response));
}
}
は、今私たちのカスタムRequest.Method.GETを持つクラスとファイルをダウンロードする場所からURLかかわらず、要求を送信します。
String mUrl= <YOUR_URL>;
InputStreamVolleyRequest request = new InputStreamVolleyRequest(Request.Method.GET, mUrl,
new Response.Listener<byte[]>() {
@Override
public void onResponse(byte[] response) {
// TODO handle the response
try {
if (response!=null) {
FileOutputStream outputStream;
String name=<FILE_NAME_WITH_EXTENSION e.g reference.txt>;
outputStream = openFileOutput(name, Context.MODE_PRIVATE);
outputStream.write(response);
outputStream.close();
Toast.makeText(this, "Download complete.", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE");
e.printStackTrace();
}
}
} ,new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO handle the error
error.printStackTrace();
}
}, null);
RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext(), new HurlStack());
mRequestQueue.add(request);
アプリケーションフォルダdata/data //に移動し、ファイルがあります。外部ファイルにダウンロードすることもできます。
あなたは、このような名前のファイルがない場合には、アプリケーションの内部ディレクトリから、その名前を持つファイルとヌルを返し
Context.getFilesDir().<file_name>
使用して、内部ストレージ内のファイルにアクセスすることができます。名前でファイルの拡張子を追加するのを忘れないでください。
openFileOutput(name、Context.MODE_PRIVATE)とは何ですか? この方法はどこですか? –
[Contextクラス](https://developer.android.com/reference/android/content/Context.html#openFileOutput(java.lang.String、%20int))から – Yehonatan
まず、Volley Requestクラスを拡張するカスタムクラスを作成する必要があります。ファイルデータをダウンロードするには、カスタムバイト配列リクエストを作成することができます。このバイト配列は、SDCardにデータを書き込む入力ストリームに変換できます。次のInputStreamVolleyRequest.javaファイルでは、カスタムバイト配列リクエストを作成し、後でファイル名の作成に使用するレスポンスヘッダーにアクセスする方法を示します。
InputStreamVolleyRequest.java
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import java.util.HashMap;
import java.util.Map;
public class InputStreamVolleyRequest extends Request<byte[]> {
private final Response.Listener<byte[]> mListener;
private Map<String, String> mParams;
//create a static map for directly accessing headers
public Map<String, String> responseHeaders ;
public InputStreamVolleyRequest(int post, String mUrl,Response.Listener<byte[]> listener,
Response.ErrorListener errorListener, HashMap<String, String> params) {
// TODO Auto-generated constructor stub
super(post, mUrl, errorListener);
// this request would never use cache.
setShouldCache(false);
mListener = listener;
mParams=params;
}
@Override
protected Map<String, String> getParams()
throws com.android.volley.AuthFailureError {
return mParams;
};
@Override
protected void deliverResponse(byte[] response) {
mListener.onResponse(response);
}
@Override
protected Response<byte[]> parseNetworkResponse(NetworkResponse response) {
//Initialise local responseHeaders map with response headers received
responseHeaders = response.headers;
//Pass the response data here
return Response.success(response.data, HttpHeaderParser.parseCacheHeaders(response));
}
}
あなたのActivityクラス.....
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.HurlStack;
import com.android.volley.toolbox.Volley;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
public class FileDownloadActivity extends ActionBarActivity implements Response.Listener<byte[]>, ErrorListener{
Button btn_download;
InputStreamVolleyRequest request;
int count;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_download);
btn_download =(Button)findViewById(R.id.button);
btn_download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Change your url below
String mUrl="http://yoururl.com";
request = new InputStreamVolleyRequest(Request.Method.GET, mUrl, FileDownloadActivity.this, FileDownloadActivity.this, null);
RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext(),
new HurlStack());
mRequestQueue.add(request);
}
});
}
@Override
public void onResponse(byte[] response) {
HashMap<String, Object> map = new HashMap<String, Object>();
try {
if (response!=null) {
//Read file name from headers
String content =request.responseHeaders.get("Content-Disposition")
.toString();
StringTokenizer st = new StringTokenizer(content, "=");
String[] arrTag = st.toArray();
String filename = arrTag[1];
filename = filename.replace(":", ".");
Log.d("DEBUG::RESUME FILE NAME", filename);
try{
long lenghtOfFile = response.length;
//covert reponse to input stream
InputStream input = new ByteArrayInputStream(response);
File path = Environment.getExternalStorageDirectory();
File file = new File(path, filename);
map.put("resume_path", file.toString());
BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(file));
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
}catch(IOException e){
e.printStackTrace();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE");
e.printStackTrace();
}
}
@Override
public void onErrorResponse(VolleyError error) {
Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE. ERROR:: "+error.getMessage());
}
}
と、このStringTokenizerはクラス..... StringTokenizer.java
- 1. アンドロイドでイメージをもっと速くダウンロードする方法Volley/Picasso/Glide他の?
- 2. PHPを使わずにアンドロイドでjavaを使ってvolleyを使ってmysqlデータを取り出す方法は?
- 3. Volleyを使ってイメージをダウンロードするには?
- 4. iframeを使ってオーディオ/ビデオファイルをダウンロードする
- 5. volleyを使ってrssフィードを解析する方法は?
- 6. Volleyを使ってこの(BufferedWriter)を実装する方法は?
- 7. Volleyを使ってAndroidにログインする方法は?
- 8. ビデオファイルをダウンロードする
- 9. オーディオファイルをカットし、アンドロイドでビデオファイルとマージする方法は?
- 10. ボレーを使ってアンドロイドに.gifをダウンロードして読み込む方法は?
- 11. ネストされたJSON Volleyを使ってアンドロイドでURLを解析する
- 12. ListViewでカスタムセルを使ってfxmlをダウンロードする方法は?
- 13. socket.ioを使ってアンドロイドでインスタントメッセージングを実装する方法は?
- 14. Volleyを使って外部のストレージ(Android)に画像/動画をダウンロードする
- 15. pythonを使ってビデオファイルからオーディオを抽出する方法は?
- 16. kotlinでvolleyライブラリを使って情報を取得する方法
- 17. アンドロイドでVolleyを使用してファイルをダウンロードしているときの進行状況バーを表示
- 18. アンドロイドでGoogleマップを使ってスピードを上げる方法は?
- 19. smartgwtを使ってサーバーからファイルをダウンロードする方法は?
- 20. PHPを使ってgoogleからapkをダウンロードする方法は?
- 21. Retrofitライブラリを使ってAndroidにファイルをダウンロードする方法は?
- 22. Ionic 2を使ってパブリックディレクトリにファイルをダウンロードする方法は?
- 23. ラクダを使ってチャンクにファイルをダウンロードする方法は?
- 24. angularjsを使ってファイルをダウンロードする方法は?
- 25. クッキーとURLを使ってファイルをダウンロードする方法は?
- 26. nodejsを使ってcloudinaryからビデオをダウンロードする方法は?
- 27. webviewを使用してビデオファイルをダウンロードする
- 28. VLCを使用してビデオファイルをストリーミングする方法は?
- 29. バイトストリームを使用してビデオファイルを送信する方法は?
- 30. htaccessを使ってビデオファイルを渡す
が私を試してみてくださいライブラリhttps://github.com/amitshekhariitbhu/Fast-Android-Networking –