数据从第一个活动转移到下一个(Android)时的值0.0

时间:2014-02-07 13:47:56

标签: android android-intent

我想将我的距离和持续时间传递到下一页,但两者的结果显示均为0.0

第一个活动

        btnStop.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v) {
            startButtonClicked=false;
            startDistance=false;
            Double value=Double.valueOf(distance.getText().toString());
            Double durationValue=time;
            Intent intent = new Intent(MainActivity.this, FinishActivity.class);

            intent.putExtra("dist", value);
            intent.putExtra("time",durationValue);
            startActivity(intent);
            finish();
        }
    });

在显示的活动

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_finish);
    Bundle extras = getIntent().getExtras();
    if (extras != null) 
    {
        Double value = extras.getDouble("dist");
        Double durationValue = extras.getDouble("time");
        displayDistance=(TextView)findViewById(R.id.finishDistance);
                displayDistance.setText("Distance: " + value);

        displayDuration=(TextView)findViewById(R.id.finishDuration);
                displayDuration.setText("Duration: " + durationValue);
        }

我按下停止后的应用程序崩溃

这是第一个Activity的完整Java代码(第二个只显示它们)。如果你们都想看看我如何得到它们

public class MainActivity extends FragmentActivity implements LocationListener{

protected LocationManager locationManager;
private GoogleMap googleMap;
Button btnStartMove,btnPause,btnResume,btnStop;
static double n=0;
Long s1,r1;
double dis=0.0;
Thread t1;
EditText userNumberInput;
boolean bool=false;
int count=0;

double speed = 1.6;
double lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4;
double dist = 0;
TextView distance;
Button btnDuration;
float[] result;
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES =1; // in Meters
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 4000; //in milliseconds
boolean startDistance = false;
boolean startButtonClicked = false;

MyCount counter;
int timer = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES,MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, this);
    if(isGooglePlay())
    {
        setUpMapIfNeeded();
    }
    distance=(TextView)findViewById(R.id.Distance);
    btnDuration=(Button)findViewById(R.id.Duration);
    btnStartMove=(Button)findViewById(R.id.Start);//start moving
    btnStop=(Button)findViewById(R.id.Stop);

    //prepare distance...........
    Log.d("GPS Enabled", "GPS Enabled");  
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    String provider = locationManager.getBestProvider(criteria, true);
    Location location=locationManager.getLastKnownLocation(provider);

    btnStartMove.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v) {

            Log.d("GPS Enabled", "GPS Enabled");  
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            String provider = locationManager.getBestProvider(criteria, true);
            Location location=locationManager.getLastKnownLocation(provider);
            lat3 = location.getLatitude();
            lon3 = location.getLongitude();
            startButtonClicked=true;
            counter= new MyCount(30000,1000);
            counter.start();
            Toast.makeText(MainActivity.this,
                      "start is true",    
                      Toast.LENGTH_LONG).show();
        }
    });
    btnStop.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v) {
            startButtonClicked=false;
            startDistance=false;
            //String dis = (String) distance.getText();
            //Double dd = Double.parseDouble(dis);
            Intent intent = new Intent(MainActivity.this, FinishActivity.class);
            //DecimalFormat df = new DecimalFormat("#.##");
            //dist=(df.format(dd);
            intent.putExtra("dist","value");
            //intent.putExtra("speed","speedValue");
            intent.putExtra("time","durationValue");
            startActivity(intent);
            finish();
        }
    });

    btnDuration.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v) {
            if(startButtonClicked=true) 
            {
                double time=n*30+r1;
                Toast.makeText(MainActivity.this,"Speed(m/s) :"+String.valueOf(dist/time)+"Duration :"+String.valueOf(time),Toast.LENGTH_LONG).show();
            }       
        }
    });

    if(location!= null)
    {
        //Display current location in Toast
        String message = String.format(
                "Current Location \n Longitude: %1$s \n Latitude: %2$s",
                location.getLongitude(), location.getLatitude()
        );
        Toast.makeText(MainActivity.this, message,
                Toast.LENGTH_LONG).show();

        //Display current location in textview  
        //latitude.setText("Current Latitude: " + String.valueOf(location.getLatitude())); 
        //longitude.setText("Current Longitude: " + String.valueOf(location.getLongitude()));
    }
    else if(location == null)
    {
        Toast.makeText(MainActivity.this,
                "Location is null",    
                Toast.LENGTH_LONG).show();
    }


}
private void setUpMapIfNeeded() {

    if(googleMap == null)
    {
        Toast.makeText(MainActivity.this, "Getting map",
                Toast.LENGTH_LONG).show();
        googleMap =((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.displayMap)).getMap();

        if(googleMap != null)
        {
            setUpMap();
        }
    }a

}

private void setUpMap() 
{
    //Enable MyLocation Layer of Google Map
    googleMap.setMyLocationEnabled(true);

    //Get locationManager object from System Service LOCATION_SERVICE
    //LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    //Create a criteria object to retrieve provider
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    //Get the name of the best provider
    String provider = locationManager.getBestProvider(criteria, true);
    if(provider == null)
    {
        onProviderDisabled(provider);
    }
    //set map type
    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    //Get current location
    Location myLocation = locationManager.getLastKnownLocation(provider);
    if(myLocation != null)
    {
        onLocationChanged(myLocation);
    }       
    locationManager.requestLocationUpdates(provider, 0, 0, this);
}

private boolean isGooglePlay() 
{
    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);

    if (status == ConnectionResult.SUCCESS)
    {

        Toast.makeText(MainActivity.this, "Google Play Services is available",
                Toast.LENGTH_LONG).show();
        return(true);
    }
    else
    {
            GooglePlayServicesUtil.getErrorDialog(status, this, 10).show();

    }
    return (false);

 }

@Override
public void onLocationChanged(Location myLocation) {
    System.out.println("speed " + myLocation.getSpeed());

        //show location on map.................
        //Get latitude of the current location
        double latitude = myLocation.getLatitude();
        //Get longitude of the current location
        double longitude = myLocation.getLongitude();
        //Create a LatLng object for the current location
        LatLng latLng = new LatLng(latitude, longitude);
        //Show the current location in Google Map
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        //Zoom in the Google Map
        googleMap.animateCamera(CameraUpdateFactory.zoomTo(20));
        googleMap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)).title("You are here!"));

        //show distance............................
        if(startDistance == true)
        {

            Toast.makeText(MainActivity.this,
                      "Location has changed",    
                      Toast.LENGTH_LONG).show();
                if(myLocation != null)
                {
                    //latitude.setText("Current Latitude: " + String.valueOf(loc2.getLatitude())); 
                    //longitude.setText("Current Longitude: " + String.valueOf(loc2.getLongitude()));
                    float[] results = new float[1]; 
                    Location.distanceBetween(lat3, lon3, myLocation.getLatitude(), myLocation.getLongitude(), results);
                    System.out.println("Distance is: " + results[0]);               

                    dist += results[0];            
                    DecimalFormat df = new DecimalFormat("#.##"); // adjust this as appropriate
                if(count==1)
                {
                    distance.setText(df.format(dist) + "meters");
                }
                    lat3=myLocation.getLatitude();
                    lon3=myLocation.getLongitude();
                    count=1;
              }

        }
        if(startButtonClicked == true)
        {
            startDistance=true;
        }

    //}


}

@Override
public void onProviderDisabled(String provider) {
    Toast.makeText(MainActivity.this,
            "Provider disabled by the user. GPS turned off",
            Toast.LENGTH_LONG).show();
}

@Override
public void onProviderEnabled(String provider) {
    Toast.makeText(MainActivity.this,
            "Provider enabled by the user. GPS turned on",
            Toast.LENGTH_LONG).show();
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    Toast.makeText(MainActivity.this, "Provider status changed",
            Toast.LENGTH_LONG).show();
}
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
}
@Override
protected void onResume() {
    super.onResume();
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES,MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, this);
}
public class MyCount extends CountDownTimer{
    public MyCount(long millisInFuture, long countDownInterval) {
    super(millisInFuture, countDownInterval);
    }
    @Override
    public void onFinish() {
        counter= new MyCount(30000,1000);
     counter.start();
     n=n+1;
    }
    @Override
    public void onTick(long millisUntilFinished) {
        s1=millisUntilFinished;
        r1=(30000-s1)/1000;
        //e1.setText(String.valueOf(r1));


    }
}}

2 个答案:

答案 0 :(得分:2)

这是你的问题:当你期望你的第二个双打时,你正在通过意图传递字符串值...

        Intent intent = new Intent(MainActivity.this, FinishActivity.class);
        intent.putExtra("dist","value");
        intent.putExtra("time","durationValue");
        startActivity(intent);

答案 1 :(得分:0)

[编辑] 我假设您有2 EditText个来允许用户输入数据。可以说它们是editText1& editText2
EditText持有Strings,因此您需要转换/转换它们。

Double value=Double.valueOf(editText1.getText().toString());
Double durationValue=Double.valueOf(editText2.getText().toString());

另请确保在EditTexts中输入仅限数字

FirstActivity 中,您传递的是Strings而不是Doubles
所以不要这样,你应该像这样使用它:

intent.putExtra("dist",value);
intent.putExtra("time",durationValue);

只需省略双引号" " 请注意,代码中 durationValue 必须Doubles。 希望有帮助。