2010-10-21 6 views
0

Хорошо, поэтому у меня есть приложение. На 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()); 
          } 
        } 
      }); 

Любая помощь будет здорово я потянув меня за волосы над этим. Я делаю довольно сложное приложение, и его легкая вещь, которая меня достает ...... идите на фигуру. если кто-нибудь может помочь мне с некоторым рабочим кодом с кнопки, которая была бы потрясающей. даже лучше, если у него есть индикатор выполнения для загрузки. это моя следующая задача после получения фактической загрузки. Спасибо

+0

Есть ли исключения? – Vinay

+0

Можете ли вы попытаться записать что-то в начале слушателя, чтобы вы знали, что он действительно что-то делает. Вы также должны думать о том, чтобы не делать загрузку в потоке пользовательского интерфейса, это заблокирует ваше приложение до завершения загрузки. – Flo

ответ

0

Первой идеей является то, что при попытке создать файл вы получаете исключение IOException. Если бы я был вами, я бы, прежде всего, переместил код, который в настоящее время находится в предложении try-catch, в другое место и протестируйте его. Тогда, когда он работает хорошо, я просто позвоню ему из try-catch.

Кроме того, я бы порекомендовал против, работающего с такими длинными операциями в потоке графического интерфейса пользователя, что делает ваше приложение невосприимчивым к пользовательскому вводу. Наиболее рекомендуется следующий подход:

 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(); 
     } 
Смежные вопросы