Android держать приложение в рабочем состоянии - PullRequest
0 голосов
/ 19 октября 2011

У меня есть этот код, который определяет вашу скорость ходьбы и записывает широту и долготу, а также вашу скорость ходьбы или, если вы не ходите в таблице sqlite, он должен вызвать таблицу и отправить их на сервер, используя httpconnect

по какой-то причине не отправляет информацию на сервер, а также через некоторое время происходит сбой, что вызывает проблему, и я где-то читал в Интернете, что я должен сделать код в качестве службы. Скажите, пожалуйста, как исправить код?и есть ли проблемы с таймером

Примечание: у меня нет ошибок в коде

Заранее спасибо

        class WalkingData{
            public double lng=0.0;
            public double lat=0.0;
            public long gpsTime=0;
            public double Walking=0.0;

            public WalkingData (double ilng, double ilat, long iGPSTime, double iWalking){
               lng=ilng;
               lat=ilat;
               gpsTime=iGPSTime;
               Walking=iWalking;

            }

        }


        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            LocationManager locationManager;
            String context = Context.LOCATION_SERVICE;
            locationManager = (LocationManager) getSystemService(context);

            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            criteria.setAltitudeRequired(false);
            criteria.setBearingRequired(false);
            criteria.setCostAllowed(true);
            criteria.setPowerRequirement(Criteria.POWER_LOW);
            String provider = locationManager.getBestProvider(criteria, true);

            Location location = locationManager.getLastKnownLocation(provider);
            updateWithNewLocation(location);

            locationManager.requestLocationUpdates(provider, 2000, 10, locationListener);
        }

        private final LocationListener locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                updateWithNewLocation(location);
            }

            public void onProviderDisabled(String provider) {
                updateWithNewLocation(null);
            }

            public void onProviderEnabled(String provider) {
            }

            public void onStatusChanged(String provider, int status, Bundle extras) {
            }
        };

        private void updateWithNewLocation(Location location) {
            String latLongString;
            TextView myLocationText;
            myLocationText = (TextView) findViewById(R.id.myLocationText);

            //String addressString = "No address found";

            if (location != null) {
                double lat = location.getLatitude();
                double lng = location.getLongitude();
                latLongString = "Lat:" + lat + "\nLong:" + lng;

                MyWalk =(double)location.getSpeed();
                MyGPSTime = location.getTime();
                long currentTimestamp = System.currentTimeMillis();
                myLocationText.setText("Your Current Walk: " + (MyWalk) +"\nYour Current Position is: " + latLongString + "\n" + "Time is: " + currentTimestamp+"\n\n");
                trakingWalking (MyWalk, lat, lng, MyGPSTime);


            }

             else {
                latLongString = "No location found";
            }
        }




    public void trakingWalking (double Walking, double lat, double lng, long GPSTime) {

        final double ChangedWalking = Walking;
        final double ChangedLat = lat;
        final double ChangedLng = lng;
        final long ChangedGPSTime = GPSTime;
        Timer updateTimer = new Timer("pedometer");
        updateTimer.scheduleAtFixedRate(new TimerTask() {
          public void run() {
           checkWalking(ChangedWalking, ChangedLat, ChangedLng, ChangedGPSTime);
           }
        }, 0, WalkingSampleRate);
        }

    private void checkWalking( double ChangedWalking1, double ChangedLat1, double ChangedLng1, long ChangedGPSTime1) {


        final double ChangedWalking2 = ChangedWalking1;
        final double ChangedLat2 = ChangedLat1;
        final double ChangedLng2 = ChangedLng1;
        final long ChangedGPSTime2 = ChangedGPSTime1;

         WalkingHandler.post(new Runnable() {
         public void run() {

             if(WalkingState==0){
                 //TODO
Log.v("log_tag", "+-+-+-+-+-+-+-+-+- you are standing");
             } //state = 0

             else(WalkingState==1){      

                 StoreWalking();
                Sticket();          
            }

              }


      });

    }


    public void Sticket(){
        Log.v("log_tag", "???????????????????????????????? Sticket()");
        elhgsdatabase db = new elhgsdatabase(this);
        db.open();
        z = db.getAllTitles(); //narrow down to 20 last seconds

       if (z.moveToFirst())
        {
            do {          
            SticketFunction(); 
           } while (z.moveToNext());
        }

       db.close();
    }

    public void  SticketFunction(){

        //HttpClient
        HttpClient WalkingWalking = new DefaultHttpClient();
        //Response handler
        ResponseHandler<String> res = new BasicResponseHandler();

        HttpPost postMethod = new HttpPost("www.some-site.com");

        try {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);
            //Walking
            nameValuePairs.add(new BasicNameValuePair("Walking", z.getString(1)+""));
            //Longitude
            nameValuePairs.add(new BasicNameValuePair("lat", z.getString(2)+""));
            //Latitude
            nameValuePairs.add(new BasicNameValuePair("lon", z.getString(3)+""));
            //GPS Time
            nameValuePairs.add(new BasicNameValuePair("GPSTime", z.getString(4)+""));
            //Encode and set entity
            postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
            //Execute 
            String response = WalkingWalking.execute(postMethod, res).replaceAll("<(.|\n)*?>","");
            if (response.equals("Done")){

                //Log.v("log_tag", "!!!!!!!!!!!!!!!!!! SticketFunction got a DONE!");

            }
            else Log.v("log_tag", "!!!!!!!?????????? SticketFunction Bad or no response: ");

        } catch (ClientProtocolException e) {  
            // TODO Auto-generated catch block 
            //Log.v("log_tag", "???????????????????? SticketFunction Client Exception");
        } catch (IOException e) {  
            // TODO Auto-generated catch block
            //Log.v("log_tag", "???????????????????? IO Exception");
        } 
    }






    /*
     * 
     */

    public void StoreWalking(){

    long idy;
            elhgsdatabase db = new elhgsdatabase(this);
            db.open();
            while (!WalkingLog.isEmpty())
            {
                WalkingData tmp = WalkingLog.poll();// .pollFirst();



                //TODO: insert log_cat markups here


                idy = db.insertWalkingInfo( tmp.Walking, tmp.lat, tmp.lng, tmp.gpsTime);


        }

            db.close();
    }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...