Android 点击按钮下载文件?

Android 点击按钮下载文件?,android,Android,所以我是android开发的新手,我一直在以尝试和错误的方式进行每件事,在很长的一段时间里进行了大量的搜索。我的问题是:我有一个按钮,我想链接到一系列代码,这些代码将从特定站点开始下载。我的代码如下 public void Download(View Button) { public void DownloadFromUrl(){ try { URL url = new URL("www.generic-site.html");

所以我是android开发的新手,我一直在以尝试和错误的方式进行每件事,在很长的一段时间里进行了大量的搜索。我的问题是:我有一个按钮,我想链接到一系列代码,这些代码将从特定站点开始下载。我的代码如下

    public void Download(View Button) {
    public void DownloadFromUrl(){
        try {

            URL url = new URL("www.generic-site.html");
            HttpURLConnection c = (HttpURLConnection) 
            url.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();

            String Path = Environment.getExternalStorageDirectory()
                +"/download/";
            Log.v("PortfolioManger", "PATH: "+Path);
            File file = new File(Path);
            file.mkdirs();
            FileOutputStream fos = new FileOutputStream("site.html");

            InputStream is = c.getInputStream();

            byte[] buffer = new byte[702];
            int len1 = 0;
            while ((len1 = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len1);
            }
            fos.close();
            is.close();
        } catch (IOException e) {
            Log.d("PortfolioManger", "Error: "+e);
        }
        Log.v("PortfolioManger", "Check: ");
    }
我试图做的是使用“public void Download(View Button)”命令启动下载,但是我收到了错误:

Multiple markers at this line
- Syntax error, insert "EnumBody" to complete BlockStatements
- Syntax error on token "void", @ expected
- Syntax error, insert "enum Identifier" to complete 
 EnumHeaderName" error under "Public void DownloadFromUrl()

我知道这可能是个愚蠢的问题,但有人能解释一下吗?

你不能把一个函数放在另一个函数里面

 public void Download(View Button) {
 public void DownloadFromUrl(){

@mibollma是对的,实际上您没有考虑java中类的结构

java中的类文件 -必须且仅包含一个公共类 -此类的名称和文件的名称必须匹配

可以有其他类,但不是公共类,也不是像

//in A.java
public class A
{
  public class B 
  {}//inner class B

}//class A

class C
{}//class C
在类中,您可以使用 -数据成员定义 -内部类定义(参见上文,因此该结构是递归/分形的) -方法

喜欢

public class A
{
   //data member
   int a = 0;
   //other data member, static and private, why not
   private static String b = "toto";

   //methods
   private void met( int b ) 
   {}//met

   //...
}//class A
这就是大局。在一个方法中,除了指令,你不能添加任何东西。不允许方法嵌套。注意,这些示例没有讨论匿名内部类,它更高级一些

还请花些时间检查,您的代码不遵守命名标准,更难遵循

问候,,
stéphane

您确实需要整理您的Java语法,但现在,假设您输入了正确的url(我无法测试,因为您使用了演示url):


关于如何修复它,有什么建议吗?另外,以2的幂分配内存可能是个好主意-我看到你有一个大小为702的字节。除非你真的需要这个尺寸,否则我建议把它改成512或1024。
public class DownloadExampleActivity extends Activity {
    /** Called when the activity is first created. */

    Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button = (Button) findViewById(R.id.download_button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DownloadFromUrl();
            }
        });
    }

    public void DownloadFromUrl() {
        try {

            URL url = new URL("www.generic-site.html");
            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();

            String Path = Environment.getExternalStorageDirectory() + "/download/";
            Log.v("PortfolioManger", "PATH: " + Path);
            File file = new File(Path);
            file.mkdirs();
            FileOutputStream fos = new FileOutputStream("site.html");

            InputStream is = c.getInputStream();

            byte[] buffer = new byte[702];
            int len1 = 0;
            while ((len1 = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len1);
            }
            fos.close();
            is.close();
        } catch (IOException e) {
            Log.d("PortfolioManger", "Error: " + e);
        }
        Log.v("PortfolioManger", "Check: ");
    }

}