2

Я пытался сделать программу выборки службы и я получаю следующее исключениеInstantiationException происходит во время загрузки с помощью службы

09-10 20: 57: 57.871: E/AndroidRuntime (280): FATAL ИСКЛЮЧЕНИЯ: главный 09-10 20: 57: 57,871: Е/AndroidRuntime (280): java.lang.RuntimeException: Невозможно создать экземпляр службы com.example.demoservice.DownloadService: java.lang.InstantiationException: com.example.demoservice. DownloadService

Я видел много решений для такого типа выполнения, как передача строки в конструктор и т. Д. Но эти решения не решили эту проблему.

Пример кода приведен ниже

public class MainActivity extends Activity { 

TextView  textView ; 
private BroadcastReceiver receiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Bundle bundle = intent.getExtras(); 
     if(bundle != null){ 
      String filepath = bundle.getString(DownloadService.FILEPATH); 
      int result = bundle.getInt(DownloadService.RESULT); 
      if(result == Activity.RESULT_OK){ 
       Toast.makeText(context, "Sucess" + filepath, Toast.LENGTH_SHORT).show(); 
      } 
      else{ 
       Toast.makeText(context, "Sucess", Toast.LENGTH_SHORT).show(); 

      } 
     } 

    } 
}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    textView = (TextView) findViewById(R.id.status); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
public void onClick(View v){ 
    Intent i = new Intent(this, DownloadService.class); 
    i.putExtra(DownloadService.FILENAME, "index.html"); 
    i.putExtra(DownloadService.URL, "http://www.vogella.com/index.html"); 
    startService(i); 
    textView.setText("Service started"); 
} 

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    registerReceiver(receiver, new IntentFilter(DownloadService.NOTIFICATION)); 
} 
@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    unregisterReceiver(receiver); 
} 

}

Сервис класса

public class DownloadService extends IntentService{ 
    private int result = Activity.RESULT_CANCELED; 
    public static final String URL = "urlpath"; 
    public static final String FILENAME = "filename"; 
    public static final String FILEPATH = "filepath"; 
    public static final String RESULT = "result"; 
    public static final String NOTIFICATION = "com.vogella.android.service.receiver"; 

public DownloadService(String name) { 
    super("DownloadService"); 
    // TODO Auto-generated constructor stub 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    // TODO Auto-generated method stub 
    String urlpath = intent.getStringExtra(URL); 
    String filename = intent.getStringExtra(urlpath); 
    File output = new File(Environment.getExternalStorageDirectory(), filename); 
    if(output.exists()){ 
     output.delete(); 
    } 
    InputStream input = null; 
    FileOutputStream fout = null; 

    try { 
     java.net.URL url = new java.net.URL(urlpath); 
     input = url.openConnection().getInputStream(); 
     InputStreamReader reader = new InputStreamReader(input); 
     fout = new FileOutputStream(output.getPath()); 
     int next = -1; 
     while((next = reader.read())!= -1){ 
      fout.write(next); 
     } 
     result = Activity.RESULT_OK; 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    finally{ 
     if(input != null){ 
      try { 
       input.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     if(fout != null){ 
      try { 
       fout.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 
    publishResult(output.getAbsoluteFile(), result); 
} 

private void publishResult(File absoluteFile, int result2) { 
    // TODO Auto-generated method stub 
    Intent intent = new Intent(this,DownloadService.class); 
    intent.putExtra(FILEPATH, absoluteFile); 
    intent.putExtra(RESULT, result2); 
    sendBroadcast(intent); 

} 

}

Я бегу приложение с помощью Emulator.Is можно запустить эту проблему эмулятор, поскольку запись во внешний каталог

Может кто-нибудь мне помочь?

ответ

1

Использование

public DownloadService() { 
    super("DownloadService"); 
    // TODO Auto-generated constructor stub 
} 

Вместо

public DownloadService(String name) { 
    super("DownloadService"); 
    // TODO Auto-generated constructor stub 
} 

UPDATE:

  1. Вы должны объявить конструктор в по умолчанию, которая вызывает public IntentService (String name) сек uper класса IntentService, который вы продлеваете. т.е. Простыми словами вам нужно предоставить конструктор no-argument для вашего сервиса, без которого андроид не сможет создать экземпляр вашего сервиса.

  2. вы начинаете intentservice используя startService(your_intent); И согласно документации

Вы не должны переопределить onStartCommand() метод для IntentService. Вместо этого переопределите onHandleIntent (Intent), который система вызывается, когда IntentService получает запрос на запуск.

IntentService

+0

я это works.Can вы сказать, почему первые один не работает и дает исключение? – Sjk

+0

сейчас iam получение null указатель исключение. Выход файла = новый файл (Environment.getExternalStorageDirectory(), имя файла); Я использую эмулятор для запуска этого приложения. Это связано с тем, что происходит исключение. – Sjk

+0

Я не думаю, что эмулятор является причиной этого. –

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