【问题标题】:ASyncTask - I want to download a file from the internet through a buttonASyncTask - 我想通过一个按钮从互联网上下载一个文件
【发布时间】:2016-04-04 17:07:49
【问题描述】:

我对整个编码还是新手,但我想要一些有关 ASyncTask 的帮助,以及如何允许它通过通知或仅在 SD 卡中将我的应用程序从互联网直接下载到我的手机。

我已经在activity_main.xml 布局中有一个按钮:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/UpdateButton"
    android:text="@string/Update"
    android:background="#6c0005"
    android:textColor="#ffffff"
    android:textSize="12dp" />

在我的 MainActivity.Java 类中,我现在只有一个连接到字符串的按钮,并打算将其重定向到 webview 以下载它:

case R.id.UpdateButton:
    Intent browserIntent = new Intent(Intent.ACTION_VIEW,
    Uri.parse(getString(R.string.UpdateAV)));
    startActivity(browserIntent);
    break;

但不是那样,我希望文件直接下载到手机或进度条显示正在下载到外部存储器或 SD 卡。

任何帮助将不胜感激。

【问题讨论】:

标签: java android android-intent download android-asynctask


【解决方案1】:

这只是一个如何下载文件的例子,如果你想使用AsyncTask,你必须在Android中为此编写一个等效的代码,你将在doInBacground()中做同样的工作方法。

public class DownloadTest {

public static void main(String[] args) {

    Thread thread = new Thread(){
        @Override
        public void run() {
            // TODO Auto-generated method stub
            super.run();
            try {
                dowanloadFile(new URL("some url"), new File("some file"));
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
    thread.start();


   }

private static void dowanloadFile(URL url, File file){
    try {
        FileUtils.copyURLToFile(url, file );
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

此代码代码使用commons-io-2.4.jar库,

你可以得到更多她的代码Example

你可以像这样在SD卡上获取下载路径

final String path = Environment.getExternalStorageDirectory().getAbsolutePath();

AsycnTask 会是这样的

private class MtDownloadTask extends AsyncTask<Void, Void ,Void>{

    URL someUrl = new URL("your url String"); //
    File someFile = new File("your file, where you want to save the data");

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        return null;
        FileUtils.copyURLToFile(url, file);
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
    }

}

确保您对您的应用拥有 Internet 权限,为此,请将此行添加到您的 AndroidManifest.xml

    <uses-permission android:name="android.permission.INTERNET"/>

【讨论】:

  • 感谢您的回答。我把它放在MainActivity中吗?或者不同的java类。另外,我应该把 .jar 文件放在哪里?我不确定。
  • @JRMVN 您必须在项目的 libs 目录中添加 jar 文件
  • 我已经添加了 asycTask 的代码,您可以将其作为 MainActivity 的内部类,也可以将其作为适合您的单独类。
  • 谢谢Pankaj!非常感谢快速帮助。我会让你知道我是怎么做的:)。
  • 我已将第一个代码添加到我的主要活动 java 类中,我还将 .jar 文件添加到 libs 文件夹中。我也应该将 ASyncTask 添加到 MainActivity.java 类吗?同样,当我这样做时,它会突出显示红色的“onPreExecute”和“onPostExecute”。 'public static void main(String[] args) {' 也保持红色,除非它被更改为这个 'public static class DownloadTest {' 代码的开头?我在这里很困惑,对不起。
猜你喜欢
  • 2014-05-22
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多