2011-06-29 47 views
2

所以即时通讯新的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: "); 
    } 

我试图做的是使用“公共无效下载(查看按钮)”命令来启动下载,但即时得到错误:

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() 

我知道它可能是一个愚蠢的问题,但任何人都可以点亮一下吗?

回答

5

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

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

如何我可以修复它任何提示? – luke

+3

通过学习Java之前学习Android – mibollma

1

@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 

这是大局。在一个方法中,除了指令外,不能添加任何东西。不允许嵌套方法。请注意,这些示例不讨论匿名内部类,它有点更先进。

请花一些时间回顾一下java naming conventions,你的代码并不尊重命名标准,这很难遵循。

问候, 斯特凡

4

你真的需要理清你的Java语法,但现在,这将工作,假设你把一个正确的URL(我没能测试你使用的演示网址):

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: "); 
    } 

} 
+0

此外,它可能是一个好主意,分配你的内存2的权力 - 我看你有一个字节的大小702。除非你真的需要它的大小,我建议做它512或1024。 –