如何在AsyncTask中传递字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在AsyncTask中传递字符串?相关的知识,希望对你有一定的参考价值。

所以我在Method1中有一个像这样的URL

public void Method1 (String x) {
    String Url = "http://MYURL.com/?country=" + x + "&api_key=APIKEY";
    new AsyncTaskParseJson().execute();
}

我需要将Url传递给我的AsyncTask,如下所示

public class AsyncTaskParseJson extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {}

    @Override
    protected String doInBackground(String... arg0)  {

        try {
            // create new instance of the httpConnect class
            httpConnect jParser = new httpConnect();

            // get json string from service url
            String json = jParser.getJSONFromUrl(ServiceUrl);

            // save returned json to your test string
            jsonTest = json.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String strFromDoInBg) {
        textLastLocation = (TextView) findViewById(R.id.lastlocation);
        textLastLocation.setText(jsonTest);
    }
}

我需要它,所以ServiceUrl =方法中的Url。通过查看其他人的问题和答案,我无法弄清楚如何做到这一点

答案

AsyncTask<First, Second, Third>上的第一个参数将定义要在execute()上传递的参数,因此您将其定义为String并传递url。然后:

public void Method1 (String x) {
   String Url = "http://MYURL.com/?country=" + x + "&api_key=APIKEY";
   new AsyncTaskParseJson().execute(url);
}

在你的AsyncTask上,你可以在arg0 (array)上获取它,i(ndex基于你在execute()上传递它的顺序)

public class AsyncTaskParseJson extends AsyncTask<String, String, String> {

  @Override
  protected void onPreExecute() {}

  @Override
  protected String doInBackground(String... arg0)  {
    String url = arg0[0]; // this is your passed url
    try {
        // create new instance of the httpConnect class
        httpConnect jParser = new httpConnect();

        // get json string from service url
        String json = jParser.getJSONFromUrl(ServiceUrl);

        // save returned json to your test string
        jsonTest = json.toString();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
  }

  @Override
  protected void onPostExecute(String strFromDoInBg) {
    textLastLocation = (TextView) findViewById(R.id.lastlocation);
    textLastLocation.setText(jsonTest);
  }
}

以上是关于如何在AsyncTask中传递字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在AsyncTask中传递字符串?

如何在导航抽屉活动模板中的片段之间传递字符串变量

如何从选项卡片段中的 AsyncTask Resftful WS 加载批量数据

Asynctask结果显示重新创建片段后

在 Asynctask 的 onPostExecute() 方法中更改片段

片段中的 Asynctask 未到达 onPostExecute