Autore Topic: Problema refresh activity  (Letto 981 volte)

Offline francescop

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    ideos u8150
  • Sistema operativo:
    ubuntu 12.04 ubuntu 10.04
Problema refresh activity
« il: 13 Settembre 2012, 12:43:57 CEST »
0
Salve a tutti,
sono nuovo del forum e un nuovo sviluppatore android.
Conosco abbastanza bene java.
Ho creato la mia prima applicazione android costituita da un activity che premendo un bottone ricava le coordinate usando la rete o il gps e le scrivi a schermo usando delle TextView.
Fino a qui ok, poi ho aggiunto un altro bottone che avvia un Thread che ogni 5 secondi richiama il metodo per il calcolo delle coordinate.
Le coordinate vengono calcolate (vedo nella console di eclipse i System.out che ho aggiunto) ma la schermata rimane bloccata.
Dove sbaglio? Magari è banale la cosa ma sono proprio alle prime armi.

Grazie per l'aiuto
FP

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema refresh activity
« Risposta #1 il: 13 Settembre 2012, 12:51:43 CEST »
0
Dove sbaglio? Magari è banale la cosa ma sono proprio alle prime armi.

Molto probabilmente c'è un errore nel codice... si può vedere?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline francescop

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    ideos u8150
  • Sistema operativo:
    ubuntu 12.04 ubuntu 10.04
Re:Problema refresh activity
« Risposta #2 il: 13 Settembre 2012, 12:57:09 CEST »
0
certo

Codice (Java): [Seleziona]
[package com.example.gpstest;

import android.os.Bundle;
import android.app.Activity;

import android.view.Menu;

import java.text.SimpleDateFormat;
import java.util.Calendar;


import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

import android.content.Context;

import android.widget.TextView;


import android.view.View;


public class MainActivity extends Activity   {
       
       
        private TextView clat;
        private TextView clong;
        private TextView dataeora;
        private LocationManager locationManager;
        private Location location;
        private LocationListener locationListener;
        private String d;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        clat = (TextView) findViewById(R.id.clat);
                clong = (TextView) findViewById(R.id.clong);
                dataeora=(TextView) findViewById(R.id.dataeora);


                this.getData();
                locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
                Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
                location=lastKnownLocation;
                if (location != null) {
                       
                        double lat = location.getLatitude();
                        double lng = location.getLongitude();
                       
                        clat.setText("Latitudine: "+String.valueOf(lat));
                        clong.setText("Longitudine: "+String.valueOf(lng));
                       
                       
                } else {
                        clat.setText("Provider non disponibile");
                        clong.setText("Provider non disponibile");
                       
                }
               
    }

   
   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
   
   
    /** Called when the user clicks the button */
    public void getLoc(View v) {
        getData();
        getCurrentLocation();
                if (location != null) {
                       
                        double lat = location.getLatitude();
                        double lng = location.getLongitude();
                       
                        clat.setText("Latitudine: "+String.valueOf(lat));
                        clong.setText("Longitudine: "+String.valueOf(lng));
                        System.out.println(lat+"==="+lng);
                       
                } else {
                        clat.setText("Provider non disponibile");
                        clong.setText("Provider non disponibile");
                       
                }
   
   
    }
   
   
   
    public void start4ever(View v) {
       
       
                new GoThread(this);
       
       
       
       
       
       
       
       
   
   
    }
   
   
   
   
   
    private void getCurrentLocation() {
       
       
       
        locationListener = new LocationListener() {
             
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO Auto-generated method stub
            }
             
            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub
            }
             
            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub
            }
             
            @Override
            public void onLocationChanged(Location loc) {
                // TODO Auto-generated method stub
                location = loc;
            }
        };
       
        locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, locationListener);
        //locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
    }
   
   
       
    public void getData(){
                Calendar c = Calendar.getInstance();
            System.out.println("Current time => "+c.getTime());
            SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
            String formattedDate = df.format(c.getTime());
            // formattedDate have current date/time
            d="Date : "+formattedDate;
                this.dataeora.setText(d);
               
        }
}/code]



[code=java]
package com.example.gpstest;

public class GoThread extends Thread{
       
        MainActivity ma;
       
        public GoThread(MainActivity ma){
                System.out.println("CREO THREAD");
                this.ma=ma;
                this.start();
        }
       
        public void run (){
       
                while(true){
                        try{
                                System.out.println("GIRO");
                        sleep(5000);
                        ma.getLoc(ma.getCurrentFocus());
                        }catch(Exception e){}
                }
               
        }

}

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema refresh activity
« Risposta #3 il: 13 Settembre 2012, 13:50:37 CEST »
0
Non è molto corretto cambiare elementi della UI da un thread diverso da quello principale.

Comunque, puoi indagare dove sta il problema mettendo un po' di Log.d() nel percorso che dovrebbe seguire l'esecuzione, per capire se segue il codice giusto e dove eventualmente deraglia.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline francescop

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    ideos u8150
  • Sistema operativo:
    ubuntu 12.04 ubuntu 10.04
Re:Problema refresh activity
« Risposta #4 il: 13 Settembre 2012, 14:05:18 CEST »
0
mmmm ok,
ma a dire il  vero all'inizio il bottone che richiama la classe Thread all'inizio faceva una cosa del genere:

Codice (Java): [Seleziona]
while(true){

try{

Thread.sleep(5000);
getLoc(v);

}catch (Exception e){e.printstackTrace();}

}
.


Anche qui ottenevo lo stesso risultato....
In questa modo è sempre il Thread principale che cambia ?
Altri modi per gestire questa cosa?
Cosa è Log.d();???
Grazie
FP

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema refresh activity
« Risposta #5 il: 13 Settembre 2012, 14:30:36 CEST »
0
Cosa è Log.d();???

Il concetto fondamentale è che tu hai descritto un malfunzionamento a parole, ed hai postato il codice, ma non hai condotto nessuna indagine (debug) per restringere il campo delle cause. L'unic modo per chi legge sarebbe prendere il tuo codice, metterlo in un progetto e fare il debug di cui sopra. Io personalmente in questo momento non ho sotto mano i tools e nemmeno il tempo, per cui ti dicevo di fare cominciare a restringere la rosa dei colpevoli e riportare qua eventuali scoperte nel caso in cui ti serva una mano.

Il Log.d(), che trovi nella documentazione ufficiale, consente di far uscire nel LogCat dei messaggi di log (credo che la stessa System.out.println che usi venga rediretta nel logcat). Ti dicevo di mettere dei punti di controllo lungo l'esecuzione che ti aspetti del codice, così da capire con precisione dove l'esecuzione stessa deraglia e prende un percorso inatteso, oppure quando un dato non è quello che ti aspetti.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store