Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ASyncTask-我想通过按钮从internet下载文件_Java_Android_Android Intent_Download_Android Asynctask - Fatal编程技术网

Java ASyncTask-我想通过按钮从internet下载文件

Java ASyncTask-我想通过按钮从internet下载文件,java,android,android-intent,download,android-asynctask,Java,Android,Android Intent,Download,Android Asynctask,我对整个编码工作还是新手,但我想得到一些关于ASyncTask的帮助,以及如何允许它通过通知或SD卡将我的应用程序从互联网直接下载到我的手机上 我在activity_main.xml布局中已经有一个按钮,它是: <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/UpdateButton" android:text="

我对整个编码工作还是新手,但我想得到一些关于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" />
但与此相反,我希望文件直接下载到手机或进度条,说明它正在下载到外部存储器或SD卡


任何帮助都将不胜感激。

这只是一个如何下载文件的示例,如果您想使用
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

你可以给她多一点密码

您可以在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);
    }

}

可能的副本谢谢你的回答。我要把这个放在主活动中吗?或者一个不同的java类。另外,我将把.jar文件放在哪里?我不确定。@JRMVN您必须将jar文件添加到项目的libs目录中。我已经为asycTask添加了代码,您可以将其作为MainActivity的内部类,也可以将其作为单独的类,以适合您的方式。谢谢Pankaj!非常感谢您的快速帮助。我会让你知道我是如何继续的:)。我已经将第一个代码添加到我的主activity java类中,我还将.jar文件添加到libs文件夹中。我是否也应该将ASyncTask添加到MainActivity.java类中?当我这样做时,它会突出显示“onPreExecute”和“onPostExecute”红色。另外,“publicstaticvoidmain(String[]args){”会保持红色,除非它在代码的开头更改为“publicstaticclassdownloadtest{”我在这里很困惑,抱歉。
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);
    }

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