Soru & Cevap

xmpp gelen mesajı servis ile Activity'deki listboxa kaydet

08.12.2014 - 02:31

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.

7 Görüntülenme

4 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user yesilce
yesilce
09.12.2014 - 08:47

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

picture-1372-1408467635.jpg
ahmtbrk
08.12.2014 - 06:20
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
Profile picture for user yesilce
yesilce
08.12.2014 - 05:03

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

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

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
----------------------------------------------------------

[code]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));
        }
    }
}[/code]

 


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

[code]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();
    }
}[/code]

picture-1372-1408467635.jpg
ahmtbrk
08.12.2014 - 03:00

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/