0

私はアンドロイドが初めてです。私はアクティビティからこれを取得しようとしています:

i.putExtra("mlat", String.valueOf(latitude));

ここまで:

public class PostDataActivity extends AsyncTask<Void, Void, Void>{
    GpsData gps;
//  double latitude = gps.getLatitude(); 
    //String mlat;

    @Override
    protected Void doInBackground(Void... params) {
        Bundle extras = getIntent().getExtras();
        String mlat = extras.getString("mlat");

        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("http://test.de");
         List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
          nameValuePairs.add(new BasicNameValuePair("lat", mlat));
          nameValuePairs.add(new BasicNameValuePair("lon", "7.358154"));
           try {
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
           } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
           }
           try {
            httpClient.execute(httpPost);
           } catch (ClientProtocolException e) {
            e.printStackTrace();
           } catch (IOException e) {
            e.printStackTrace();
           }
        return null;
    }

しかし getIntent は未定義です

Bundle extras = getIntent().getExtras();
String mlat = extras.getString("mlat");

Activity と doInBackground の間でデータを転送する方法は?

4

3 に答える 3

2

executeメソッドはAsyncTask、バックグラウンドタスクに追加のデータを取得するために使用できる文字列パラメーターの配列を取ります。

これはAndroidソースドキュメントの例です:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

  ..
}

この方法でメインスレッドから呼び出すことができます。

new DownloadFilesTask().execute(url1, url2, url3);
于 2012-10-22T12:50:11.750 に答える
0

最初に、私のマットが提供したチュートリアルを実行します。

あなたの場合、あなたは以下のようにあなたのコードを修正しなければなりません:

1.引数の型をvoidからStringに変更します。

パブリッククラスPostDataActivityはAsyncTask< String、Void、Void>{を拡張します

2.データを引数としてAsyncTaskに渡します。

new PostDataActivity()。execute( " mlat ");

于 2012-10-22T12:59:00.470 に答える
0

を拡張しているため、インテントには何も含まれていませんAsyncTask。アプローチは全体的に間違っていると思います。

はアクティビティであるためPostDataActivity、AsyncTask を拡張しないでください。これがどのように見えるべきかのアイデアであると私が信じているものは次のとおりです。

public class PostDataActivity extends Activity {
GPSData gps;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.);

    Bundle extras = getIntent().getExtras();
    String mlat = extras.getString("mlat");

    MyDownloaderTask task = new MyDownloaderTask();
    task.execute(mlat);
}
    //Check docs for parameterisation of AsyncTask
private class MyDownloaderTask extends AsyncTask<String, Void, String> {
    protected String doInBackground(String params...) {
        string someResult;
        String mlat = params[0];
        //Got your variable, do whatever you want from here on
        return someResult; //Since it is no longer AsyncTask<Void, Void, Void>
    }
    protected void onPostExecute(String result) {
        //This executes after task completes successfully
    }
    protected void onCancelled(String result) {
        //This executes after task completes unsuccessfully
    }
}

//...
}
于 2012-10-22T13:05:37.927 に答える