当前位置: 首页 > 知识库问答 >
问题:

未使用GSM下载凌空文件

丘友樵
2023-03-14

我正在使用截击从AWS下载文件。文件大小约为6MB。在Android文档中提到,你不应该使用截取下载大文件。那么截击时文件大小的限制是什么。我在emulator上使用不同的网络类型和信号强度来检查我的应用程序在下载文件时的行为。我主要想检查GSM网络类型。如果我保持网络类型为GSM,即使我的信号强度很大,我也会超时。如果我的网络类型是Full或LTE,则文件下载速度非常快。对于GSM,我甚至将重试限制增加到5分钟,但它仍然给我超时。我不想让重试策略超过10秒。这是我的密码。

public class MainActivity extends AppCompatActivity  {

    InputStreamVolleyRequest request;
    private TextView textView;
    private Button button;
    //private RequestQueue requestQueue;
    //WifiManager wifiManager;
     long FILE_SIZE ;
    long startTime;
    long endTime;
    private long takenTime;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.tv);
        button = findViewById(R.id.button);
        String mUrl="my url";
//        wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startTime = System.currentTimeMillis();
                textView.setText("");


                MySingleton.getMySingleton(getApplicationContext()).addToRequestQueue(request);

//                requestQueue.add(request);
                button.setEnabled(false);

            }
        });

//        requestQueue = Volley.newRequestQueue(getApplicationContext());
        request = new InputStreamVolleyRequest(Request.Method.GET, mUrl, new Response.Listener<byte[]>() {
            @Override
            public void onResponse(byte[] response) {
                if(response!=null){
                    FileOutputStream outputStream;


                    String name = "justdownloaded.mp3";

                    try {

                        outputStream = openFileOutput(name, Context.MODE_PRIVATE);

                        outputStream.write(response);

                        outputStream.close();
                        Toast.makeText(MainActivity.this, "Download complete.", Toast.LENGTH_LONG).show();
                        textView.setText("Complete");

                        endTime = System.currentTimeMillis();


                        File file1 = new File(getApplicationContext().getFilesDir().getAbsolutePath(),name);
                        Log.i("TAG", "onResponse: "+MD5.calculateMD5(file1));
                        boolean b =MD5.checkMD5(request.responseHeaderETag,file1);
                        Log.i("TAG", "onResponse: "+b);
                        FILE_SIZE = file1.length();
                        int fileSize = (int) (FILE_SIZE / 1024);

                        takenTime = endTime - startTime;
                        double s = (double) takenTime / 1000;
                        double speed = fileSize / s;
                        Log.i("TAG", "onResponse: "+new DecimalFormat("##.##").format(speed)
                                + "kb/second"+fileSize);

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    button.setEnabled(true);

                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                if(error != null){
                    if(error.getClass().equals(TimeoutError.class)){
                        Toast.makeText(getApplicationContext(),"Time Out Error",Toast.LENGTH_LONG).show();
                    }
                }
                endTime = System.currentTimeMillis();

//                Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
                Log.i("TAG", "onErrorResponse: "+error.networkResponse);
                Log.i("TAG", "onErrorResponse2: "+error.getLocalizedMessage());
                Log.i("TAG", "onErrorResponse3: "+error.getMessage());

                Log.i("TAG", "onErrorResponse4: "+error.getNetworkTimeMs());
                Log.i("TAG", "onErrorRespons5: "+error.getCause());
                Log.i("TAG", "onErrorRespons6: "+error.getStackTrace().toString());
                takenTime = endTime - startTime;
                button.setEnabled(true);
                textView.setText("Error");
                double s = (double) takenTime / 1000;
                double speed = FILE_SIZE / s;
                Log.i("TAG", "onResponse: "+new DecimalFormat("##.##").format(speed) + "kb/second");

            }
        });

        request.setRetryPolicy(new DefaultRetryPolicy(8000,
                2,
                2));

    }

}

错误侦听器中的所有日志语句都返回null。我可以看到GSM的超时吐司。是否可以使用凌空而不是下载管理器为GSM执行此操作?我不能使用改型,因为客户的要求是凌乱的,为了在最短的时间内使用GSM从服务器高效下载文件,我应该做些什么

共有1个答案

王凯旋
2023-03-14

如果您想在应用程序中下载大文件,可以使用https://github.com/amitshekhariitbhu/Fast-Android-Networking.

 public void downloadFile(String url) {

        AndroidNetworking.download(url, Utils.getRootDirPath(this), fileName)
                .setPriority(Priority.HIGH)
                .setMaxAgeCacheControl(1000, TimeUnit.DAYS)
                .build()
                .setDownloadProgressListener(new DownloadProgressListener() {
                    @Override
                    public void onProgress(long bytesDownloaded, long totalBytes) {
                        int per = (int) ((bytesDownloaded * 100) / totalBytes);

                    }
                })
                .startDownload(downloadListener);
    }
 类似资料:
  • 我使用的是volley.jar,在编译时没有错误,但是有运行时异常。 然后添加volley.jar和build path。什么是问题? CustomAdapter.java

  • 问题内容: 我正在尝试使用asyncTask下载文件,但无法正常工作,没有错误消息或什么都没有,只是不下载文件…我尝试了所有操作,但似乎并没有输入…任何人都知道可以是问题吗?我在手机上测试过,网址也可以。 问题答案: 我只运行了您的代码,它对我来说很好用。该图像已下载到sdcard。 请注意,请确保在AndroidManifest.xml中设置了以下权限: 这是我得到的日志(请注意,我添加了):

  • 问题内容: 我编写了一些代码来下载我所做的网络广播的一集。它获取剧集的URL,并获取保存它的位置。但是,它最多只能下载16MB,然后自动取消。我不完全确定要增加此值需要更改什么值。是否可以,有人可以指出正确的方向吗?谢谢! 下载代码: 问题答案: 快速查看transferFrom的文档: 好。 计数的值1 << 24(来自原始问题)等于16M 我想这就是您的问题的答案:-)

  • 问题内容: 我需要提供下载文件的链接,任何用户都必须隐藏该链接并且可以访问该链接,这是我的代码,没有任何错误,但是我什至无法打开下载对话框: 模板 脚本文件 问题答案: 首先,您不能“隐藏/不公开”基于Web的技术(HTML / CSS / JavaScript)应用程序中的链接。下载是由客户端处理的,因此Download / Link-URL必须是公共的。您可以尝试使用后端执行的编程语言(例如“

  • 我想做的是用httpclient下载一个文件。目前我的代码如下。 我的下载URL如下所示:http://example.com/file/afz938f348dfa3 正如你可以看到没有扩展名的文件(至少在网址)然而,当我去一个正常的浏览器网址,它下载文件asdasdaasda.txt或asdasdasdsd.pdf(名称是不同的url和extenstion并不总是相同的,取决于我试图下载什么)。

  • 我有一个CSV文件的URL,我可以在浏览器中下载并打开该文件,而不会出现问题。 我正在尝试使用电源外壳下载此文件,但没有成功。我尝试使用,和使用web命令对象,但没有运气。