2016-12-15 2 views
0

Ich schreibe einen Intent-Service, um Bild an Server zu senden. Ich starte einen Dienst in einer Aktivität (in onResume) in onDestroy stoppe ich Dienst. Das sollte genau so funktionieren: Ich mache ein Foto und ich habe eine ArrayList mit Fotopfad. Und im Service sende ich ein Foto. Ich möchte ein Foto senden und wenn ich sende, warte ich und sende noch eins. Wenn ich ein Foto aufgenommen habe, bestätige (ich habe 2 Fotos zu senden) und gehe zurück zur Absicht (und starte den Dienst) Ich sehe ein schwarzes Bild.Java Android Intent-Service

Service:

public class Sendrer extends Service { 

    public static boolean running = false; 
    private Timer timer = new Timer(); 
    private SendPhotoTask asyncSender; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.e("tworzenie serwisu ", "tworzenie"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.e("Dziełanie serwisu ", "Dziełanie"); 

     while (! ConfirmDetailsPGOActivity.myList.isEmpty()) { 
      if(!running) { 
       asyncSender = new SendPhotoTask(); 
       asyncSender.execute(); 
      } 
     } 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public void onDestroy() { 
     if (running) { 
      timer.cancel(); 
      asyncSender.cancel(true); 
      running = false; 
     } 
//  asyncSender.cancel(true); 
     Log.e("service " , "nie działa"); 
     super.onDestroy(); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    class SendPhotoTask extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... strings) { 
      running = true; 
      InputStream responseInputStream = null; 
      try { 
       responseInputStream = HttpConnectionsUtil.sendPhotoRequest(getApplicationContext(), true, ConfirmDetailsPGOActivity.myList.get(0)); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      Log.e("Wysyłanie zdjęcia ", convertStreamToString(responseInputStream)); 
      return convertStreamToString(responseInputStream); 
     } 
     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      ConfirmDetailsPGOActivity.myList.remove(0); 
     } 
    } 

    static String convertStreamToString(java.io.InputStream is) { 
     java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); 
     return s.hasNext() ? s.next() : ""; 
    } 
} 

Und in Tätigkeit Ich habe dies:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    stopService(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    startService(); 
} 

private void stopService(){ 
    stopService(myIntent); 
} 

private void startService(){ 
    myIntent = new Intent(RouteDetailsActivity.this, Sendrer.class); 
    startService(myIntent); 
} 
+0

Fügen Sie Protokollausgabe oder etwas hinzu – Maxouille

Antwort

0

Ok denke ich, dass eine Weile ist ein schwarzer Bildschirm zu erzeugen, da die ganze Zeit ist die Liste überprüfen. Ich entferne eine Weile und eine Checkliste Difference und es funktioniert, habe ich das getan:

public class Sendrer extends Service { 

    public static boolean running = false; 
    private Timer timer = new Timer(); 
    private SendPhotoTask asyncSender; 
    private Context context; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     context = getApplicationContext(); 
     Log.e("tworzenie serwisu ", "tworzenie"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.e("Dziełanie serwisu ", "Dziełanie"); 
     if (!MainActivity.photoListSend.isEmpty()) { 
      if(!running) { 
       asyncSender = new SendPhotoTask(); 
       asyncSender.execute(); 
      } 
     } 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public void onDestroy() { 
     if (running) { 
      timer.cancel(); 
      asyncSender.cancel(true); 
      running = false; 
     } 
     Log.e("service " , "nie działa"); 
     super.onDestroy(); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    class SendPhotoTask extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... strings) { 
      running = true; 
      InputStream responseInputStream = null; 
      Log.e("start wysłania " , "start"); 
      try { 
       responseInputStream = HttpConnectionsUtil.sendPhotoRequest(getApplicationContext(), true, MainActivity.photoListSend.get(0).getName()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      Log.e("Wysyłanie zdjęcia ", convertStreamToString(responseInputStream)); 
      return convertStreamToString(responseInputStream); 
     } 
     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      MainActivity.photoListSend.remove(0); 
      if(! MainActivity.photoListSend.isEmpty()){ 
       asyncSender = new SendPhotoTask(); 
       asyncSender.execute(); 
       Log.e("Wysyłanie kolejnego " , "zdjecia"); 
      } 
     } 
    } 

    static String convertStreamToString(java.io.InputStream is) { 
     java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); 
     return s.hasNext() ? s.next() : ""; 
    } 
}