Autore Topic: [Errore] Aggiornare UI da un servizio  (Letto 1370 volte)

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
[Errore] Aggiornare UI da un servizio
« il: 15 Agosto 2012, 21:10:57 CEST »
0
Salve vorrei chiedervi aiuto perché non so piu cosa inventarmi, ho fatto una piccola app che dopo aver chiamato un servizio questo salva tutti gli SMS salvati sul device, e "dovrebbe aggiornare una Textview " per mostrarli.

il codice si sviluppa su due file uno per classe.

qui il codice.

Activity
Codice (Java): [Seleziona]
package org.altervista.alessiopiromallo.www.letturasms;

import android.os.Bundle;
import android.os.Handler;

import android.os.Message;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

@SuppressLint("HandlerLeak")
public class MainActivity extends Activity {
        Button b1;
        Intent servizio;
        public TextView tv;
        Handler myHandler;
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1=(Button)findViewById(R.id.bottone);
        servizio= new Intent(getApplicationContext(),LetturaSms.class);
        tv= (TextView)findViewById(R.id.Testo);
        b1.setOnClickListener(new View.OnClickListener() {
               
                        public void onClick(View arg0) {
                                // TODO Auto-generated method stub
                                startService(servizio);
                                b1.setText("Close");
                                aggiorno();
                                b1.setOnClickListener(new View.OnClickListener() {
                                       
                                        public void onClick(View v) {
                                                // TODO Auto-generated method stub
                                                stopService(servizio);
                                                System.exit(0);
                                        }
                                });
                        }
                });
    }
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
        public void aggiorno(){
                myHandler =new Handler(){
                        @Override
                        public void handleMessage(Message msg){
                                String currentValue = msg.getData().getString("currentValue");
                                tv.setText(currentValue);
                        }
                };
        }
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
        public void updare_txt(String sms){
                Message msg =myHandler.obtainMessage();
                Bundle b = new Bundle();
                b.putString("currentValue", sms);
                msg.setData(b);
                myHandler.sendMessage(msg);
        }
}


SERVICE

Codice (Java): [Seleziona]
package org.altervista.alessiopiromallo.www.letturasms;

import android.app.Service;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public class LetturaSms extends Service{
        MainActivity ma;
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
        @Override
        public void onStart(Intent intent, int startId){
                super.onStart(intent, startId);
                Log.d("Service","Avvio servizio");
                Toast toast_1=Toast.makeText(this,"Lettura In corso",Toast.LENGTH_LONG);
                toast_1.show();
                stampaSMS();
                Toast toast_2=Toast.makeText(this,"Lettura Eseguita",Toast.LENGTH_LONG);
                toast_2.show();
        }
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
        @Override
        public void onDestroy(){
                super.onDestroy();
                Log.d("Service","Distrutto servizio");
               
        }
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
        @Override
        public IBinder onBind(Intent intent) {
                // TODO Auto-generated method stub
                return null;
        }
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
        public void stampaSMS(){
               
                Uri uriSMSURI = Uri.parse("content://sms/inbox");
            Cursor cur = getContentResolver().query(uriSMSURI, null, null, null,null);
            String sms = " ";
            while (cur.moveToNext()) {
                sms += "From :" + cur.getString(2) + " : " + cur.getString(11)+"\n";        
            }
            MainActivity ma =new MainActivity();
            ma.updare_txt(sms);
        }
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
}

LOGCAT

Codice: [Seleziona]
08-15 19:07:50.592: E/AndroidRuntime(2586): FATAL EXCEPTION: main
08-15 19:07:50.592: E/AndroidRuntime(2586): java.lang.RuntimeException: Unable to start service org.altervista.alessiopiromallo.www.letturasms.LetturaSms@41367078 with Intent { cmp=org.altervista.alessiopiromallo.www.letturasms/.LetturaSms }: java.lang.NullPointerException
08-15 19:07:50.592: E/AndroidRuntime(2586):         at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2375)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at android.app.ActivityThread.access$1900(ActivityThread.java:122)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1209)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at android.os.Handler.dispatchMessage(Handler.java:99)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at android.os.Looper.loop(Looper.java:137)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at android.app.ActivityThread.main(ActivityThread.java:4340)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at java.lang.reflect.Method.invokeNative(Native Method)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at java.lang.reflect.Method.invoke(Method.java:511)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at dalvik.system.NativeStart.main(Native Method)
08-15 19:07:50.592: E/AndroidRuntime(2586): Caused by: java.lang.NullPointerException
08-15 19:07:50.592: E/AndroidRuntime(2586):         at org.altervista.alessiopiromallo.www.letturasms.MainActivity.updare_txt(MainActivity.java:58)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at org.altervista.alessiopiromallo.www.letturasms.LetturaSms.stampaSMS(LetturaSms.java:50)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at org.altervista.alessiopiromallo.www.letturasms.LetturaSms.onStart(LetturaSms.java:23)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at android.app.Service.onStartCommand(Service.java:438)
08-15 19:07:50.592: E/AndroidRuntime(2586):         at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2358)
08-15 19:07:50.592: E/AndroidRuntime(2586):         ... 10 more


In pratica fa tutto quello che deve fare ma mi restituisce errore quando cerco di aggiornare la UI dal servizio richiamando "ma.updare_txt(sms);"
Mi potete indirizzare thx  :-)

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:[Errore] Aggiornare UI da un servizio
« Risposta #1 il: 16 Agosto 2012, 14:01:43 CEST »
0
nessuno che mi puo dare una mano  :-)

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:[Errore] Aggiornare UI da un servizio
« Risposta #2 il: 16 Agosto 2012, 18:06:19 CEST »
0
Premetto che non ho mai usato i service.
Secondo me l'errore è quando nel service, nel metodo stampasms crei la nuova mainactivity.

Questo perchè tu lì ne crei una nuova (usando new mainactivity); ma in realtà l'activity non esiste (le activity non si creano con new ma lanciandole da un intent). E quindi ti restituisce il nullpointer exception.

Pronto ad essere smentito per aver scritto una cavolata :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:[Errore] Aggiornare UI da un servizio
« Risposta #3 il: 16 Agosto 2012, 19:01:56 CEST »
0
quindi cosa mi consigli per aggiornare la view dal service in questione ?

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:[Errore] Aggiornare UI da un servizio
« Risposta #4 il: 17 Agosto 2012, 15:08:17 CEST »
0
up

Offline andexp

  • Utente junior
  • **
  • Post: 60
  • Respect: 0
    • Mostra profilo
Re:[Errore] Aggiornare UI da un servizio
« Risposta #5 il: 25 Agosto 2012, 12:58:03 CEST »
0
hai risolto? FACCI sapere

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:[Errore] Aggiornare UI da un servizio
« Risposta #6 il: 25 Agosto 2012, 14:12:21 CEST »
0
si implementando la guida a questo link:
http://www.anddev.it/index.php/topic,32.0.html