xmpp gelen mesajı servis ile Activity'deki listboxa kaydet

Merhaba,

bir servis yazarak openfire server'den gelen mesajları alabiliyor, aldığım mesajları LogChat'te gösterip veritabanına kaydedebiliyorum. Fakat gelen mesajı MainActivity içinde yer alan listbox'a ekleyemiyorum. Bu ekleme işlemini nasıl yapabilirim.

    0

    ahmet cavus

    09 Aralık 2014

    Ne yazık ki işin içinden çıkamadım.... Eğer mümkünse kod üzerinde gösterirseniz çok sevinirim...

    0

    Ahmet Burak Demirkoparan

    08 Aralık 2014

    Suan mobilim bakamiyorum http://android-coding.blogspot.com.tr/2011/11/pass-data-from-service-to-activity.html?m=1 Tutorial e göz at istersen

    0

    ahmet cavus

    08 Aralık 2014

    Cevabın için teşekkürler Ahmet,

    ben android'de servis ve observe örneklerini ayrı ayrı projeler olarak çalıştırmama rağmen servis ile observe olayını birbirine bağlayamadım.

    Aşağıda ZamanServisi.java içinde yer alan

    yardimci.post(new Runnable() {
    	  @Override
    	  public void run() {
    	    Toast.makeText(ZamanServisi.this, sonuc, Toast.LENGTH_SHORT).show();
    	  }
    	});

    satırlarında olduğu gibi Toast kullanarak ekrana basmak yerine, AnaEtkinlik.java'da ki ListView'e nasıl satır ekletebiliriz.

    Eğer projeyide indirmek isterseniz, projeyi internete yükleyebilirim.

     


    AnaEtkinlik.java
    ----------------------------------------------------------

    package com.androidce.servisogreniyorum;
    
    
    	import android.app.Activity;
    	import android.app.ActivityManager;
    	import android.app.ActivityManager.RunningServiceInfo;
    	import android.content.Intent;
    	import android.os.Bundle;
    	import android.util.Log;
    	import android.view.View;
    	import android.widget.ArrayAdapter;
    	import android.widget.Button;
    	import android.widget.ListView;
    
    
    	public class AnaEtkinlik extends Activity
    	{
    	  String deneme;
    	 
    	  private String[] OrnekSatirlar = {"ornek satir 1", "ornek satir 2"};
    	 
    	  @Override
    	  public void onCreate(Bundle savedInstanceState)
    	    {
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.ana_etkinlik);
    	   
    	    ListView listemiz=(ListView) findViewById(R.id.listView1);
    	    ArrayAdapter<String> veriAdaptoru = new ArrayAdapter<String>
    	    (this, android.R.layout.simple_list_item_1, android.R.id.text1, OrnekSatirlar);
    	    listemiz.setAdapter(veriAdaptoru);
    	   
    	    Button dugme = (Button) findViewById(R.id.dugmeServis);
    	   
    	    if(servisCalisiyorMu())
    	    {
    	      dugme.setText(getString(R.string.durdur));
    	    }
    	    else
    	    {
    	      dugme.setText(getString(R.string.baslat));
    	    }
    	  }
    	 
    	 
    	  private boolean servisCalisiyorMu()
    	  {
    	    ActivityManager servisYoneticisi = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    	   
    	    for(RunningServiceInfo servis : servisYoneticisi.getRunningServices(Integer.MAX_VALUE))
    	    {
    	      if (getApplication().getPackageName().equals(servis.service.getPackageName()))
    	      {
    	        return true;
    	      }
    	    }
    	    return false;
    	  }
    	 
    	  public void dugmeServisTikla(View v)
    	  {
    	    Button dugme = (Button) v;
    	   
    	    if(servisCalisiyorMu())
    	    {
    	      stopService(new Intent(this, ZamanServisi.class));
    	      dugme.setText(getString(R.string.baslat));
    	    }
    	    else
    	    {
    	      startService(new Intent(this, ZamanServisi.class));
    	      dugme.setText(getString(R.string.durdur));
    	    }
    	  }
    	}

     


    ZamanServisi.java
    -----------------------------------------------------------

    package com.androidce.servisogreniyorum;
    
    
    	import java.text.SimpleDateFormat;
    	import java.util.Date;
    	import java.util.Timer;
    	import java.util.TimerTask;
    
    
    	import android.app.Service;
    	import android.content.Intent;
    	import android.os.Handler;
    	import android.os.IBinder;
    	import android.os.Looper;
    	import android.widget.Toast;
    
    
    	public class ZamanServisi extends Service
    	{
    	  Timer zamanlayici;
    	  Handler yardimci;
    	 
    	  final static long ZAMAN = 5000;
    	 
    	  @Override
    	  public IBinder onBind(Intent intent)
    	  {
    	    return null;
    	  }
    	 
    	  @Override
    	  public void onCreate()
    	  {
    	    super.onCreate();
    	   
    	    zamanlayici = new Timer();
    	    yardimci = new Handler(Looper.getMainLooper());
    	   
    	    zamanlayici.scheduleAtFixedRate(new TimerTask()
    	    {
    	      @Override
    	      public void run()
    	      {
    	        bilgiVer();
    	      }
    	    }, 0, ZAMAN);
    	  }
    	 
    	  private void bilgiVer()
    	  {
    	    long zaman = System.currentTimeMillis();
    	   
    	    SimpleDateFormat bilgi = new SimpleDateFormat("dd MMMM yyyy, EEEE / HH:mm");
    	    final String sonuc = bilgi.format(new Date(zaman));
    	   
    	    yardimci.post(new Runnable()
    	    {
    	      @Override
    	      public void run()
    	      {
    	        Toast.makeText(ZamanServisi.this, sonuc, Toast.LENGTH_SHORT).show();
    	      }
    	    });
    	  }
    	 
    	  @Override
    	  public void onDestroy()
    	  {
    	    zamanlayici.cancel();
    	    super.onDestroy();
    	  }
    	}

    0

    Ahmet Burak Demirkoparan

    08 Aralık 2014

    Observer design pattern kullanabilirsin.

    Mesajı dinleyen sayfaya activityi register edip mesaj geldiğinde bildirimde bulunursun olur biter.

    https://aarcoraci.wordpress.com/2012/11/22/android-simple-sync-manager-using-observer-pattern/

    Bu soruya cevap vermek için üye olmanız veya giriş yapmanız gerekmektedir.