下载按钮不起作用请帮忙

时间:2010-10-21 06:07:29

标签: android

好的所以我有我的应用程序90%内置一切正常但我的下载按钮。我已经被困在这几天了,所以如果有人可以帮助一个人用一些适合这个的东西。我的文件是.pkg,我从xml文件中提取文件名,这是我的按钮代码,但我不知道我在这里做错了什么。单击它时它什么都不做。 appUrl是我在xml文件中的文件名

Button b_get_book = (Button)v.findViewById(R.id.Button01);
        b_get_book.setOnClickListener(
                new View.OnClickListener()
                {              
                    public void onClick(View v) {
                         try {
                                File root = Environment.getExternalStorageDirectory();
                                URL u = new URL("http://www.mysite.com/" + appUrl);
                                HttpURLConnection c = (HttpURLConnection) u.openConnection();
                                c.setRequestMethod("GET");
                                c.setDoOutput(true);
                                c.connect();
                                FileOutputStream f = new FileOutputStream(new File(root, appUrl));

                                InputStream in = c.getInputStream();

                                byte[] buffer = new byte[1024];
                                int len1 = 0;
                                while ((len1 = in.read(buffer)) > 0) {
                                    f.write(buffer, 0, len1);
                                }
                                f.close();
                            } catch (Exception e) {
                                Log.d("Downloader", e.getMessage());
                            }  
                    }
           });

任何帮助都会很棒我一直把头发拉过来。我制作了一个非常复杂的应用程序,这很容易让我变得......如果有人可以帮助我从一个很棒的按钮帮助我一些工作代码。如果它有下载的进度条,那就更好了。这是我实际下载工作后的下一个任务。谢谢

1 个答案:

答案 0 :(得分:0)

第一个想法是在尝试创建文件时遇到IOException。如果我是你,我首先会将当前在你的try-catch子句中的代码移动到其他地方,并测试它。然后,当它运行良好时,我会从try-catch中调用它。

此外,我建议反对在GUI线程中运行如此长的操作 - 这会使您的应用无法响应用户输入。建议采用以下方法:

        public void onClick(View v) {
            new AsyncTask<Void, Void, Void>() {
                  @Override
                  protected Void doInBackground(Void... params) {
                      try {
                        /* your code here*/
                      } catch (Exception e) {
                        Log.e("Downloader", e.getMessage());
                      }  
                  }
               }.execute();
        }