2016-08-30 2 views
0

Я разработка Android приложения для загрузки файла с сервером и сохраните этот файл на путь, указанный ..Android: ошибка при использовании службы для фоновой задачи?

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

Может кто-нибудь помочь мне найти ошибку ... Спасибо ..

Моей службы кода Is ...

public class MyService extends Service { 

    Contacts c = new Contacts(); 
    // File url to download 
    private static String file_url = "http://f23.wapka-files.com/download/6/9/4/1408248_69459e029be95f96ff9f98ff.mp3/a0f9f2173d3d81a49c28/01-Podimeesha-Anand.Madhusoodhanan.mp3y"; 

    public MyService() { 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO: Return the communication channel to the service. 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

      File folder = new File(Environment.getExternalStorageDirectory().getPath() + "/Jithin's/"); 
      if (!folder.exists()) { 
       try { 
        folder.mkdirs(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
        System.out.println("Default Save Path Creation Error:" + folder); 
       } 
      } 
      c.setA(Environment.getExternalStorageDirectory().toString() + "/Jithin's/downloadedfile.srt"); 
      // starting new Async Task 
      new DownloadFileFromURL().execute(file_url); 

     MyService.this.stopService(intent); 

     return super.onStartCommand(intent, flags, startId); 
    } 


    /** 
    * Background Async Task to download file 
    * */ 
    class DownloadFileFromURL extends AsyncTask<String, String, String> { 

     /** 
     * Before starting background thread 
     * Show Progress Bar Dialog 
     */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

     } 

     * Downloading file in background thread 
     */ 
     @Override 
     protected String doInBackground(String... f_url) { 
      int count; 
      try { 
       URL url = new URL(f_url[0]); 
       URLConnection conection = url.openConnection(); 
       // 6yi7 conection.connect(); 
       conection.setRequestProperty("Accept-Encoding", "identity"); 

       // getting file length 
       int lenghtOfFile = conection.getContentLength(); 

       // input stream to read file - with 8k buffer 
       InputStream input = new BufferedInputStream(url.openStream(), 8192); 

       // Output stream to write file 
       OutputStream output = new FileOutputStream(c.getA()); 

       byte data[] = new byte[1024]; 

       long total = 0; 

       while ((count = input.read(data)) != -1) { 
        total += count; 
        // publishing the progress.... 
        // After this onProgressUpdate will be called 
        publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 

        // writing data to file 
        output.write(data, 0, count); 
       } 

       // flushing output 
       output.flush(); 

       // closing streams 
       output.close(); 
       input.close(); 

      } catch (Exception e) { 
       Log.e("Error: ", e.getMessage()); 
      } 

      return null; 
     } 


     @Override 
     protected void onPostExecute(String file_url) { 

      Toast.makeText(MyService.this, "Downloaded Succesfully.. check Jithin's folder 2 see file...", Toast.LENGTH_LONG).show(); 

      //my_image.setImageDrawable(Drawable.createFromPath(imagePath)); 
     } 
    } 
} 

Мой Основная деятельность код ..

public void download(View view) { 
     String value = getIntent().getExtras().getString("id"); 
     if (value.equals("Song0")) { 
      Intent i=new Intent(Song_List.this, MyService.class); 
      startActivity(i); 
      Toast.makeText(Song_List.this, "Downloading..........", Toast.LENGTH_SHORT).show(); 
     } 
} 
+0

, что это ошибка? –

+0

Метод Onclick can not execute .., Код в моем основном действии] –

ответ

4

Изменить код из,

Intent i=new Intent(Song_List.this, MyService.class); 
startActivity(i); 

это к,

Intent i=new Intent(Song_List.this, MyService.class); 
startService(i); 
+0

Спасибо, что это сработало. У меня есть еще одно сомнение .. то есть загрузка не работает в фоновом режиме. Папка не создается, как указано в коде. можете ли вы предложить редактировать это тоже .. –

+0

создать папку с помощью String folder_main = "NewFolder"; Файл f = новый файл (Environment.getExternalStorageDirectory(), folder_main); if (! F.exists()) { f.mkdirs(); } и PLS-чек вы упомянули, что вы пишете разрешение на внешнее хранилище в Manifest –

2

MyService является продление службы. Поэтому вы должны использовать startService (Intent).

так что ваш код может выглядеть следующим образом:

public void download(View view) { 
     String value = getIntent().getExtras().getString("id"); 
     if (value.equals("Song0")) { 
      Intent i=new Intent(Song_List.this, MyService.class); 
      startService(i); 
      Toast.makeText(Song_List.this, "Downloading..........", Toast.LENGTH_SHORT).show(); 
     } 
} 
2

Прежде всего, вы должны начать свой сервис как это не с startActivity

public void download(View view) { 
     String value = getIntent().getExtras().getString("id"); 
     if (value.equals("Song0")) { 
      Intent i=new Intent(Song_List.this, MyService.class); 
      startService(i); 
      Toast.makeText(Song_List.this, "Downloading..........", Toast.LENGTH_SHORT).show(); 
     } 
    } 

после остановки службы, когда загрузка файла завершена

Смежные вопросы