簡體   English   中英

將參數傳遞給異步類,使param [0]和params [1]包含不同的值

[英]Passing parameter to async class such that param[0] and params[1] contain different values

我正在開發一個Android應用程序的天氣。 我將郵政編碼作為輸入傳遞給異步任務類。 但我想傳遞國家代碼。

     @Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_refresh) {
        FetchWeatherTask weatherTask = new FetchWeatherTask();
        weatherTask.execute("110087"); //THE ARGUMENT I PAASED IS POSTAL CODE

        return true;
    }
    return super.onOptionsItemSelected(item);
}

我也想傳遞國家代碼(例如IN ),所以當我構建我的uri時它有郵政編碼, IN

例:

http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7&APPID=74250c25b0f8a52f176e6d6e3717e285

如果我包含國家/地區代碼,則應為:

http://api.openweathermap.org/data/2.5/forecast/daily?q=94043,IN&mode=json&units=metric&cnt=7&APPID=74250c25b0f8a52f176e6d6e3717e285

碼:

String format = "json";
String units = "metric";
int numDays = 7;

try {
    // Construct the URL for the OpenWeatherMap query
    // Possible parameters are avaiable at OWM's forecast API page, at
    // http://openweathermap.org/API#forecast
    final String FORECAST_BASE_URL =
                    "http://api.openweathermap.org/data/2.5/forecast/daily?";
    final String QUERY_PARAM = "q";
    final String FORMAT_PARAM = "mode";
    final String UNITS_PARAM = "units";
    final String DAYS_PARAM = "cnt";
    final String APPID_PARAM = "APPID";

    Uri builtUri = Uri.parse(FORECAST_BASE_URL).buildUpon()
                    .appendQueryParameter(QUERY_PARAM, params[0])
                    .appendQueryParameter(FORMAT_PARAM, format)
                    .appendQueryParameter(UNITS_PARAM, units)
                    .appendQueryParameter(DAYS_PARAM, Integer.toString(numDays))
                    .appendQueryParameter(APPID_PARAM, BuildConfig.OPEN_WEATHER_MAP_API_KEY)
                    .build();

    URL url = new URL(builtUri.toString());

    Log.v(LOG_TAG, "Built URI " + builtUri.toString());

簡單的解決方案是通過:

weatherTask.execute("110087IN");

但我想在uri構建中附加查詢,並且我想將2個實體傳遞給類,這樣params [0]就像“110087”所以params [1]應該是“IN”。

我希望你理解這個問題

AsyncTaskexecute()方法可以接受多個參數。 如果你需要傳遞更多的參數,你就這樣做:

weatherTask.execute("110087", "IN")

然后params[0]"110087"params[1]"IN"

像這樣更改你的AsyncTask

private class FetchWeatherTask extends AsyncTask<Object, Void, Void> {

    @Override
    protected void doInBackground(Object... params) {

        String postalCode = (String) params[0];
        String countryCode = (String) params[1];
        // if you also want to pass third value in type int it should be like
        //int thirdValue = (Integer) params[3]
    }
    ...
}

然后,您可以將不同類型的多個值傳遞給AsyncTask

weatherTask.execute("110087", "IN") 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM