2016-12-15 6 views
0

イメージをサーバーに送信するインテントサービスを作成します。 onDestroyの1つのアクティビティ(onResume内)でサービスを開始しますが、サービスを停止します。これはちょうどこのように動作するはずです。私は写真を撮って、写真のパスを持つArrayListを持っています。そしてサービスで私は写真を送る。私は1枚の写真を送りたいと思っています。私は送っています。私は写真を撮るときに(私は2枚の写真を送っている)確認し、意図に戻る(そしてサービスを開始する)、私は黒い叫び声を見る。Javaアンドロイドインテントサービス

サービス:

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() : ""; 
    } 
} 

そして活動で、私はこの持っている:

@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

ログの出力または何かを追加する – Maxouille

答えて

0

[OK]を、私はすべての時間が、リストをチェックしているので、しばらくは黒い画面を生成していると思います。私はしばらく削除し、チェックリストのdiffrenceを行い、それは私がこれをした:

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() : ""; 
    } 
} 
関連する問題