2015-12-04 44 views
0

我有一個獲取當前位置的應用程序。它會返回您當前的地址,經度和緯度。當你點擊轉換時,它會將你帶到一個新的班級。用另一個類的雙精度填充TextView

我想獲得緯度和經度(如果有的話)到另一個類的textView。

FIRST CLASS

public class MainActivity extends AppCompatActivity { 

private static Button newWindowBtn; //new window button 

Button btnShowLocation; 
GPSTracker gps; 
Double latitude; 
Double longitude; 
String addressStr; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      shareIt(); 
     } 
    }); 


    final TextView address = (TextView)findViewById(R.id.textView); 

    onClickButtonListener(); //NEW WINDOW CLICK LISTENER 

    btnShowLocation = (Button) findViewById(R.id.show_location); //GPS BUTTON 

    final Geocoder geocoder = new Geocoder(this,Locale.ENGLISH); 

    btnShowLocation.setOnClickListener(new View.OnClickListener() 
    { //GPS CLICK LISTENER 
     @Override 
     public void onClick(View v) { //SHOWS LOCATION 
      gps = new GPSTracker(MainActivity.this); 

      if(gps.canGetLocation()){ 
       latitude = gps.getLatitude(); 
       longitude = gps.getLongitude(); 


       try{ 
        List<Address> addresses = geocoder.getFromLocation(latitude,longitude,1); 
        if(addresses != null) 
        { 
         Address returnedAddress = addresses.get(0); 
         StringBuilder strReturnedAddress = new StringBuilder("Address:\n"); 
         for (int i = 0; i < returnedAddress.getMaxAddressLineIndex();i++){ 
          strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n"); 
         } 


         address.setText(strReturnedAddress.toString() + "Latitude: " + latitude + "\nLongitude: " + longitude); 

         addressStr = strReturnedAddress.toString(); 

        } 
        else 
        { 
         address.setText("No address returned"); 
        } 
       } 
       catch(IOException e){ 
        e.printStackTrace(); 
        address.setText("Can't get address"); 
       } 
      }else{ 
       gps.showSettingsAlert(); 
      } 
     } 
    }); 
} 

第二類

public class secondActivity extends AppCompatActivity { 

    Button convertBtn; 
    TextView latitudeTxt; 
    TextView longitudeTxt; 
    TextView latitudeDMS; 
    TextView longitudeDMS; 



    convertTo convert = new convertTo(); 

    MainActivity mainActivity = new MainActivity(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       shareIt(); 
      } 
     }); 

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

     latitudeTxt = (TextView)findViewById(R.id.latitudeTxt); 
     longitudeTxt = (TextView)findViewById(R.id.longitudeTxt); 

     latitudeDMS = (TextView)findViewById(R.id.latitudeDMS); 
     longitudeDMS = (TextView)findViewById(R.id.longitudeDMS); 



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

      } 
     }); 
    } 

所以我希望latitudeTxt有從先前的屏幕(第一類)的緯度。我是一名學生並努力學習。

我嘗試添加這第一類:

secondActivity secondActivity = new secondActivity(); 
secondActivity.latitudeTxt.setText(latitude); 

這沒有奏效。

我試圖在第二類

MainActivity mainActivity= new MainActivity(); 
latitudeTxt.setText(mainActivity.latitude); 
+0

你可以這樣做一個: http://stackoverflow.com/questions/14292398/how-to-pass-data-from-2nd-activity-to-1st-activity-when -pressed回,機器人 –

回答

0

這種做法是完全錯誤的,並由Android氣餒。

MainActivity mainActivity= new MainActivity(); 

永遠不會這樣做。

什麼你實際上所追求的是活動之間共享數據,(也有很多在社區這樣的問題),在最前一頁類(實際活動) and this is how this works

此作爲參考:

static final int PICK_CONTACT_REQUEST = 1; // The request code 
... 
private void pickContact() { 
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts")); 
    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers 
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST); 
} 

並且在第二:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Check which request we're responding to 
    if (requestCode == PICK_CONTACT_REQUEST) { 
     // Make sure the request was successful 
     if (resultCode == RESULT_OK) { 
      // The user picked a contact. 
      // The Intent's data Uri identifies which contact was selected. 

      // Do something with the contact here (bigger example below) 
     } 
    } 
} 
0

使用束抽發送的緯度,從第一類經度值到第二如。提取2nd類中的值並將值設置爲相應的文本視圖。

0

你不應該建立這樣的活動對象,

MainActivity mainActivity= new MainActivity();

活動由使用Intents開始,如果您需要參考您的活動的當前對象,那麼你可以通過MainActivity.this做到這一點。

而就"This didn't work."而言,這是因爲您正在創建Activity類的新對象(這是正確的語法)。新對象將擁有自己的實例變量副本。所以它不會有已經存在的Activity對象的值(向您顯示)。

從說,FirstActivity傳遞自己的價值觀來SecondActivity,做這樣的事情,

FirstActivity

Intent secondActivity = new Intent(FirstActivity.this, SecondActivity.class); 
secondActivity.putExtra("latitude", value); 
secondActivity.putExtra("longitude", value); 
startActivity(secondActivity); 

然後在SecondActivity

Intent intent = getIntent(); 
String latitude = intent.getStringExtra("latitude"); 
String longitude = intent.getStringExtra("longitude");