2012-01-05 2 views
9

में गतिविधियों के बीच तारों को पास करना मैंने कुछ जगहों की खोज की है लेकिन मुझे अभी तक काम करने वाले किसी भी अच्छे समाधान के साथ नहीं मिला है, और मुझे वास्तव में मदद की ज़रूरत है! मैं एक ऐसा एप्लिकेशन बना रहा हूं जिसे एक गतिविधि से दूसरे गतिविधि में अक्षांश और अक्षांश स्ट्रिंग को पारित करने की आवश्यकता हो। मैं यह कैसे कर सकता हूं ??? यहां मेरे कोड पर एक नज़र डालें: LocationActivity.java को दूसरी गतिविधि में स्ट्रिंग को पास करने की आवश्यकता है और दूसरे में जिसे मैंने यहां पेस्ट नहीं किया है। और स्ट्रिंग की जरूरत है कि पारित होने के लिए नामित किया गया है: "latLongString"एंड्रॉइड

LocationActivity.java:

import android.R.string; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 

public class LocationActivity extends Activity { 
private String Location; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    LocationManager locManager; 
    locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f, locationListener); 
    Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    updateWithNewLocation(location); 
    if(location != null)         
    { 
     double latitude = location.getLatitude(); 
    double longitude = location.getLongitude(); 
    } 
    } 


private void updateWithNewLocation(Location location) { 
    TextView myLocationText = (TextView)findViewById(R.id.LocationWord); 
    String latLongString = ""; 
    if (location != null) { 
     double lat = location.getLatitude(); 
     double lng = location.getLongitude(); 
     latLongString = "Lat:" + lat + "\nLong:" + lng; 
     //This is where i need to pass the string to the other activity 

    } else { 
     latLongString = "No location found"; 
    } 
    myLocationText.setText("Your Current Position is:\n" + 
      latLongString); 
} 

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) { 
    } 
}; 


} 

अन्य गतिविधि:

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.util.List; 
import java.util.Locale; 

import android.R.string; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.location.Address; 
import android.location.Criteria; 
import android.location.Geocoder; 
import android.location.Location; 
import android.os.Bundle; 
import android.os.Environment; 
import android.telephony.gsm.SmsMessage; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.location.LocationManager; 
import android.location.LocationListener; 

public class FindAndroidActivity extends Activity implements OnClickListener { 
/** Called when the activity is first created. */ 
Button Nextbutton1, Nextbutton2, Nextbutton3, TestLocationService, EditSettings; 
TextView Cordinates, Adress, FindAndroid, TextView; 
EditText LocationWord; 
private LocationManager locManager; 
private LocationListener locListener; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.firsttimescreen); 
     Nextbutton1 = (Button)findViewById(R.id.Nextbutton1); 
     Nextbutton1.setOnClickListener(this); 
} 
public void onClick(View src) { 
    switch(src.getId()) { 
    case R.id.Nextbutton1: 
     setContentView(R.layout.setup); 
     Nextbutton2 = (Button)findViewById(R.id.Nextbutton2); 
     TestLocationService = (Button)findViewById(R.id.TestLocationService); 
     TestLocationService.setOnClickListener(this); 
     Nextbutton2.setOnClickListener(this); 
     break; 
    case R.id.Nextbutton2: 
     setContentView(R.layout.setup1); 
     Nextbutton3 = (Button)findViewById(R.id.Nextbutton3); 
     LocationWord = (EditText)findViewById(R.id.LocationWord); 
     LocationWord.requestFocus(View.FOCUS_DOWN); 
     Nextbutton3.setOnClickListener(this); 
     break; 
    case R.id.Nextbutton3: 
     setContentView(R.layout.main); 
     EditSettings = (Button)findViewById(R.id.EditSettings); 
     EditSettings.setOnClickListener(this); 
     break; 
    case R.id.TestLocationService: 
     Bundle extras = getIntent().getExtras(); 
     if(extras !=null) { 
      String value = extras.getString("KEY");    
     } 
     Cordinates = (TextView)findViewById(R.id.Cordinates); 
     Cordinates.setText(value); 
      //This does not work because the string "value" isn't availible outside the braces, 
      //obviously. How do i make it availible there??? 
     break; 
    case R.id.EditSettings: 
     setContentView(R.layout.setup1); 
     Nextbutton3 = (Button)findViewById(R.id.Nextbutton3); 
     LocationWord = (EditText)findViewById(R.id.LocationWord); 
     LocationWord.requestFocus(View.FOCUS_DOWN); 
     Nextbutton3.setOnClickListener(this); 
     break; 
    } 
} 

} परिदृश्यों की

+1

आप आशय स्तरीय यहाँ उत्तर से putExtra() और getExtras() (या GetString) कार्यों का उपयोग करना चाहिए: [PutExtra/GetExtra] [1] [1]: http: // stackoverflow। कॉम/प्रश्न/5265 9 13/कैसे-टू-यूज-टूटेक्स्ट्रा-एंड-गेटक्स्ट्रा-फॉर स्ट्रिंग-डेटा –

उत्तर

33

अपने LocationActivity वर्ग में:

Intent i = new Intent(this, FindAndroidActivity.class); 
i.putExtra("KEY",YourData); 

FindAndroidActivity वर्ग

Bundle extras = getIntent().getExtras(); 
if(extras !=null) { 
    String value = extras.getString("KEY"); 
} 
9

युगल:

  1. यदि आप नई गतिविधि शुरू करते समय स्ट्रिंग को पास करना चाहते हैं, तो इसे प्रारंभिक इरादे में जोड़ें और इसे नई गतिविधि के onCreate में पुनर्प्राप्त करें।
    Sending arrays with Intent.putExtra

    // Sending activity 
    String latLong = "test"; 
    Intent i = new Intent(sendingClass.this, receivingClass.class); 
    i.putExtra("latLong", latLong); 
    startActivity(i); 
    
    // Receiving activity 
    Bundle extras = getIntent().getExtras(); 
    String latLong = extras.getString("latLong"); 
    
  2. आप जब आप एक गतिविधि से लौटने 3 परिदृश्य, स्ट्रिंग पारित करने के लिए है, तो startActivityForResult में और क्रियान्वयन onActivityResult घटना
    http://micropilot.tistory.com/1577

  3. दोनों के बीच स्ट्रिंग गुजर चाहते हैं एक ही समय में चल रही गतिविधियां संभव नहीं है क्योंकि एक समय में केवल एक गतिविधि चल सकती है (अग्रभूमि में हो)।

0

अपने आवेदन की बहु सूत्रण माना जाता है? यदि ऐसा है तो एक और अन्य कीड़े खोल सकता है और डेटा को पीछे और पीछे खींचने से काफी रोचक हो जाता है।

क्या आपने Putextra और getextra कार्यों में देखा है? वे गतिविधियों के बीच आगे और पीछे महान पार्सिंग डेटा काम करते हैं। हालांकि मुझे नहीं लगता कि वे बॉक्स के बाहर बहु ​​थ्रेडेड अनुप्रयोगों के साथ अच्छी तरह से काम करते हैं।

1

कभी-कभी, इराद बहुत बोझिल और परेशान हो जाते हैं, इसके बजाय मैं एक आसान (शायद इष्टतम नहीं) डिज़ाइन पैटर्न का उपयोग करता हूं: सिंगलटन। एक सिंगलटन आपके ऐप में कहीं भी बैठे कोड द्वारा पहुंचने योग्य एक सामान्य स्टोरेज बॉक्स की तरह काम करता है, जहां ऐप की लाइफसाइक्ल सक्रिय होने पर मूल्य संग्रहीत होते हैं। आप वहां विधियां भी डाल सकते हैं। एक सिंगलटन एक कक्षा है जिसे केवल एक बार तुरंत चालू किया जा सकता है, और इसे हर जगह से एक्सेस करने के लिए आवश्यक सभी चर के लिए आपके एक स्टॉप वेयरहाउस के रूप में उपयोग किया जा सकता है। आप किसी भी गतिविधि या कक्षा से भी संदर्भ में सिंगलटन पर किसी भी चर सेट/प्राप्त कर सकते हैं! जैसा कि मैंने कहा था कि शायद बेहतर विकल्प हैं, लेकिन मेरे पास इरादे, शून्य पॉइंटर्स और क्या नहीं है, के साथ खुद को दंडित करने का समय नहीं है। निम्न कोड के साथ एक नई कक्षा बनाएं, इसे मेरा सिंगलेटन या जो कुछ भी कहें, और हर जगह से चर/सेटिंग शुरू करना शुरू करें!:

public class MySingleton extends Application{ 
    private volatile static appSingleton mInstance = null; 
    private String mystring; 

private appSingleton(){ 
    mystring="hello"; //initialize your var here 
    //Add all the variables you need, here. 
public static MySingleton getInstance(){ //Singleton's core 
     if(mInstance == null){ 
      mInstance = new MySingleton(); 
      } 
     return mInstance; 
     } 

//Place Set and Get methods here 
public String getMystring(){return this.mystring;} 
public void setMystring(String s){mystring = s;} 
//Add get/setmethods for your other variables here 
} //Thats it 

अब, मान लीजिए कि आपने mystring स्थापित करने के लिए गतिविधि बी पर "अलविदा", तो ऐसा करना चाहते हैं करना चाहते हैं:

MySingleton.getInstance().setMystring("hello"); 

आप किसी भी अन्य से "mystring" का उपयोग करना चाहते हैं गतिविधि, वर्ग, आदि ... और एक पाठ बॉक्स पर प्रदर्शित सिर्फ इस कार्य करें:

MyTextBox.setText(MySingleton.getInstance().getMystring()); 

आप देख सकते हैं, तो आप कहीं भी मान लिख सकते हैं और कोड की एक लाइन के साथ, कहीं से भी उन मूल्यों को पढ़ सकते हैं। का आनंद लें!

+0

'MySingleton.getInstance()। setMystring ("हैलो");' वह जगह है जहां आप स्ट्रिंग सेट करने के लिए उल्लेख कर रहे हैं 'अलविदा' के लिए, मुझे लगता है कि यह 'MySingleton.getInstance() होना चाहिए। setMystring ("अलविदा"); '। मैंने कोशिश की लेकिन मेरी स्ट्रिंग 'अलविदा' में नहीं बदली है, यह 'हैलो' बनी हुई है। –

+0

@ कमलप्रीत ग्रिवाल कि "हैलो" मान केवल ऐप के जीवन चक्र के माध्यम से ही जीवित रहेगा, इसका मतलब है कि यदि आप ऐप बंद करते हैं या एंड्रॉइड ओएस आपके ऐप को मारता है, तो वह मान गायब हो जाएगा। स्ट्रिंग को "स्थायी रूप से" बनाए रखने के लिए साझा संदर्भों का उपयोग करें। – Josh