Variable an AsyncTask übergeben

  • Antworten:1
lars
  • Forum-Beiträge: 20

10.10.2012, 21:03:25 via Website

Hallo zusammen,

ich versuche eine Variable aus einer Activity an einen AsyncTask zu übergeben.
Das gelingt mir leider nicht. Ich mache folgendes:

1static String latitude;
2...
3double longitude = gps.getLongitude();
4...
5nameValuePairs.add(new BasicNameValuePair("lat", StartActivity.latitude));

Hier der ganze Code:

StartActivity
1public class StartActivity extends Activity {
2
3 Button btnShowLocation;
4 static String latitude;
5
6 // GPSTracker class
7 GpsData gps;
8
9 @Override
10 public void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.main);
13
14 btnShowLocation = (Button) findViewById(R.id.ansehen);
15
16 // show location button click event
17 btnShowLocation.setOnClickListener(new View.OnClickListener() {
18
19 @Override
20 public void onClick(View arg0) {
21 // create class object
22 gps = new GpsData(StartActivity.this);
23
24 // check if GPS enabled
25 if(gps.canGetLocation()){
26
27 double latitude = gps.getLatitude();
28 double longitude = gps.getLongitude();
29 //latitude.setText(String.valueOf(latitude));
30
31 // \n is for new line
32 new PostDataActivity().execute();
33 Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
34...

PostDataActivity
1public class PostDataActivity extends AsyncTask<Void, Void, Void>{
2
3 // GPSTracker class
4 GpsData gps;
5
6 @Override
7 protected Void doInBackground(Void... params) {
8
9 HttpClient httpClient = new DefaultHttpClient();
10 HttpPost httpPost = new HttpPost("http://blabla.de");
11 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
12 nameValuePairs.add(new BasicNameValuePair("lat", StartActivity.latitude));
13...

Wie übergebe ich die variablen richtig?

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

10.10.2012, 22:27:22 via Website

Indem du z.B. dem AsyncTask einen Konstruktor verpasst, der eine Variable annimmt und als Instanzvariable speichert,
ODER indem du den AsyncTask nicht mit 3 mal Void parametrisierst, sondern, mit dem ParameterTyp, den du tatsächlich verwenden willst und den dann einfach beim execute() übergibst.

Generell würde ich dir aber empfehlen dir die Java-Grundlagen anzueignen, denn der Frage nach zu urteilen hapert es bereits da am grundlegenden Verständnis.

— geändert am 10.10.2012, 22:28:21

Antworten