server no'lu sunucuya intent servisini kullanarak göndermek istiyorum. Yapmış olduğum şey niyet servisini başlatıyor ve bu sınıfta verileri yerel db'den alıyorum ve for döngüsünde veriyi sunucuya gönderiyorum. İşe yarıyor. Ben hizmet tetiklemek için bir alarm yöneticisi kullanıyorum örnekDöngüsünde android niyet hizmeti
public void onReceive(Context context, Intent intent) {
for (int i=0;i<5;i++){
Intent startService = new Intent(context, SampleService.class);
startWakefulService(context, startService);
}
}
için yani niyet hizmetini başlatmak için döngü için kullanmak gerektiği Ama sorudur. Doğru yol nedir? lütfen yardım et. Teşekkürler! . Bu zaman kodu 'genel sınıf ScheduleAlarmReciever WakefulBroadcastReceiver {
private AlarmManager alarmManager;
private PendingIntent pendingIntent;
final int REQUEST_CODE=10;
SessionManager manager;
@Override
public void onReceive(Context context, Intent intent) {
manager=new SessionManager(context);
Log.e("ScheduleAlarmReceiver","New intent");
Log.e("ScheduleAlarmReceiver","Service is set");
Intent startService = new Intent(context, SampleService.class);
startWakefulService(context, startService);
}
public void setAlarm(Context context){
Intent intent=new Intent(context,ScheduleAlarmReciever.class);
pendingIntent=PendingIntent.getBroadcast(context,REQUEST_CODE,intent, PendingIntent.FLAG_UPDATE_CURRENT);
long firstMillis=System.currentTimeMillis();
long INTERVAL_IN_MILLIS=2*60*1000; //two minutes interval
alarmManager= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,firstMillis,INTERVAL_IN_MILLIS,pendingIntent);
}
} this is how i am setting the alarm
alarmReciever.setAlarm (MainActivity.this) uzanır; and this is my intent service class
genel sınıf SampleService, IntentService'yi genişletir { /** * Bir IntentService oluşturur. Alt sınıfınızın kurucusu tarafından çağrıldı. * * @param name Çalışan iş parçacığı için kullanılır, yalnızca hata ayıklama için önemlidir. */ AsyncHttpClient asyncHttpClient; DbUtil dbUtil; NotificationManager notificationManager; NotificationCompat.Builder mBuilder; int id = 1; hizmet tetiklemek için
public static final String API="http://customer-data.com/api/insertblevital";
public SampleService() {
super("sampleservice");
}
@Override
public void onCreate() {
super.onCreate();
asyncHttpClient=new SyncHttpClient();
dbUtil=DbUtil.getInstance(getApplicationContext());
notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
@Override
protected void onHandleIntent(Intent intent) {
if(0!=dbUtil.getAllData().size()) {
mBuilder= new NotificationCompat.Builder(getApplicationContext());
mBuilder.setContentText("Uploading data")
.setContentTitle("Sample Upload")
.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setProgress(0, 0, true);
notificationManager.notify(id,mBuilder.build());
for(int i=0;i<dbUtil.getAllData().size();i++){
Log.e("Sample email",dbUtil.getAllData().get(i).getEmail());
}
ArrayList<Sample> sampleArrayList = dbUtil.getAllData();
for (Sample sample : sampleArrayList) {
postData(sample);
}
mBuilder.setContentText("upload Complete");
mBuilder.setProgress(0, 0, false);
notificationManager.notify(id,mBuilder.build());
}
}
public void postData(Sample sample){
RequestParams requestParams=new RequestParams();
requestParams.add("email",sample.getEmail());
requestParams.add("Name",sample.getName());
requestParams.add("Height",sample.getHeight());
requestParams.add("Gender",sample.getGender());
asyncHttpClient.post(API,requestParams,new PostResponseHandler(sample.getEmail()));
}
public class PostResponseHandler extends TextHttpResponseHandler{
String email;
public PostResponseHandler(String email){
this.email=email;
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
Log.e("failure","failure");
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
Log.e("responseString",responseString);
ArrayList<String> stringArrayList=new ArrayList<>();
stringArrayList.add(email);
dbUtil.UpdateFlag(stringArrayList);
}
}
} `
Neden alarm tetiklendiğinde for döngüsünü kullanıyorsunuz ve onReceive() ;? Örneğiniz bir şey kaçırmıyorsa ... mantıklı değil mi? –
Tüm yapmak istediğim, belirli bir süre sonra arka planda sunucuya veri yığınlarını göndermektir. Bilmiyorum, çalışacak ya da tek bir hizmet içinde asynchttp kullanmalıyım. –
Bir "IntentService", kendi iş parçacığı içinde çalışmak üzere özel olarak tasarlanmıştır; bu nedenle, "onHandleIntent()" öğesinde çalıştırılan her şey, hedef hizmetinizi birden çok kez çağırırsanız istekleri sıraya koyacak şekilde Eşzamansız olacaktır. Eğer 'IntentService' içinde birden çok görevi paralel olarak çalıştırmak istiyorsanız o zaman bir "ThreadPool" ya da "AsyncTask" 'a bir "Executor" –