开发者

How to transfer data from one activity to another?

I am trying to transfer data from one page to another but some problem is coming below is the code. I am trying to transfer value of variable using bundle from first activity to second but something is wrong please tell me whats going wrong.

below is first activity:-

package route.planning;



import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;


public class login extends Activity {
    /** Called when the activity is first created. */

    Context mCtx;
    final static int START =0;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mCtx = this;


        Button btn = (Button)findViewById(R.id.btn);

        btn.setOnClickListener(new OnClickListener(){

        //  @Override
        public void onClick(View v)
        {
            String fromLat = new String();
            String fromLong = new String();
            String toLat = new String();
            String toLong = new String();

            fromLat=String.valueOf(R.id.FromLatitude);
            fromLong=String.valueOf(R.id.FromLongitude);
            toLat=String.valueOf(R.id.ToLatitude);
            toLong=String.valueOf(R.id.ToLongitude);


            Intent intent = new Intent(mCtx, MapRouteActivity.class);

            /*Sending some arguments*/ 
            Bundle bundle = new Bundle();

              bundle.putString("fromLat",fromLat );
      开发者_JAVA百科        bundle.putString("fromLong",fromLong );
              bundle.putString("toLat",toLat );
              bundle.putString("toLong",toLong );


              intent.putExtras(bundle);

            /*Start Activity*/
            mCtx.startActivity(intent);

            /*Start ActivityForResult*/
            ((Activity)mCtx).startActivityForResult(intent, 2);
        }
    });
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == START)
        {

            Toast.makeText(mCtx, Integer.toString(resultCode), Toast.LENGTH_SHORT).show();
        }
    }


    @Override
    public void onDestroy(){
        super.onDestroy();
        finish();
    }
}

Below is part of second activity where i am trying to get value from above

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

import org.ci.geo.route.Road;
import org.ci.geo.route.RoadProvider;

import route.planning.R;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;
import android.os.Handler;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;

public class MapRouteActivity extends MapActivity {

        LinearLayout linearLayout;
        MapView mapView;
        private Road mRoad;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.routeplanning);
                mapView = (MapView) findViewById(R.id.mapview);
                mapView.setBuiltInZoomControls(true);

                Bundle extras = this.getIntent().getExtras();
                final String fLat=extras.getString("fromLat");
                final String fLong=extras.getString("fromLong");
                final String tLat=extras.getString("toLat");
                final String tLong=extras.getString("toLong");



                new Thread() {
                        @Override
                        public void run() {

                            double fromLat=Double.parseDouble(fLat);
                            double fromLon=Double.parseDouble(fLong);
                            double toLat=Double.parseDouble(tLat);
                            double toLon=Double.parseDouble(tLong);
                              //double fromLat = 28.6353, fromLon = 77.2250, toLat = 30.7313, toLon = 76.7754;
                                /***url contains the path to fetch the kml file from the internet*/
                                String url = RoadProvider
                                                .getUrl(fromLat, fromLon, toLat, toLon);
                                InputStream is = getConnection(url);
                                mRoad = RoadProvider.getRoute(is);
                                mHandler.sendEmptyMessage(0);
                        }
                }.start();
        }


        fromLat=String.valueOf(R.id.FromLatitude);
        fromLong=String.valueOf(R.id.FromLongitude);
        toLat=String.valueOf(R.id.ToLatitude);
        toLong=String.valueOf(R.id.ToLongitude);

Here is the problem. You don't read any actual data from the activity, but get the string represantation of identifiers of controls.

You need to obtain the user inputs if R.id.FromLatitude and so on are identifiers of EditText:

fromLat = ((EditText)findViewById(R.id.FromLatitude)).getText().toString();


You won't get the values from the following code which you have used:

    fromLat=String.valueOf(R.id.FromLatitude);
    fromLong=String.valueOf(R.id.FromLongitude);
    toLat=String.valueOf(R.id.ToLatitude);
    toLong=String.valueOf(R.id.ToLongitude);

This way, you're accessing the IDs of these views, which will be in int. You have to get the instance of the views (EditText, here) then have to extract their value.

Go with @Vladimir's solution, its perfect.


Remove final keyword from Second activity:

final String fLat=extras.getString("fromLat");
final String fLong=extras.getString("fromLong");
final String tLat=extras.getString("toLat");
final String tLong=extras.getString("toLong");

to

String fLat=extras.getString("fromLat");
String fLong=extras.getString("fromLong");
String tLat=extras.getString("toLat");
String tLong=extras.getString("toLong");
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜