将字符串参数传递给asynctask

时间:2013-06-17 08:48:49

标签: android android-asynctask

你好我正在使用android android并在异步任务中完成一些任务。我想调用异步任务并将字符串作为参数传递。我搜索谷歌但没有运气,这是我的代码调用异步任务

new warkah_detail().execute(id_warkah);

这是我的异步任务

class warkah_detail extends AsyncTask<String, String, String>
{
    @Override
    protected void onPreExecute()
    {
        pDialog = new ProgressDialog(warkah.this);
        pDialog.setMessage("Fetching Details...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    @Override
    protected String doInBackground(String... args)
    {
        try
        {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("id_warkah", id_warkah));
            json = jParser.makeHttpRequest(url_warkah, "POST", params);

这些代码会引发错误,例如Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

将字符串传递给异步任务的最佳方法是什么?我将不胜感激任何帮助。感谢。

[UPDATE] 我已经删除了吐司,但我仍然没有收到从被叫方传递给异步任务的正确字符串。有什么想法吗?

5 个答案:

答案 0 :(得分:4)

Toast.makeText(getApplicationContext(), "ID : " + id_warkah, Toast.LENGTH_LONG).show();

需要在UI线程上执行Toast。将其移至onPostExcuted或使用runOnUiThread

您的Stringargs[0]。您应该阅读varargs

的文档

答案 1 :(得分:1)

只需从onBackground方法中删除以下行。

Toast.makeText(getApplicationContext(), "ID : " + id_warkah, Toast.LENGTH_LONG).show();

并将其放在onPostExecute方法上或使用runOnUiThread。

答案 2 :(得分:0)

正如blackbelt建议你在后台线程上更新ui。在onPostExecute()上做它。或者使用runOnUiThread

      runOnUiThread(new Runnable() //run on ui thread
      {
           public void run() 
           { 
               // update ui     
           }
      });

要使用参数,请使用

       params.add(new BasicNameValuePair("id_warkah", args[0]));

您可以查看文档以获取更多信息

http://developer.android.com/reference/android/os/AsyncTask.html

您也可以将参数传递给asynctask的构造函数并使用它。

答案 3 :(得分:0)

添加新的warkah_detail(id_warkah).execute();而不是新的warkah_detail()。execute(id_warkah); 并编写一个用于定义参数的构造函数。

答案 4 :(得分:0)

以下是一个例子:

     public class DoSomethingTask extends AsyncTask<String, Void, String> {

           protected String doInBackground(String... params) {
                  // You call your parameter like this
                  String someStringResult = doSomething(params[0]);
                  return someStringResult;
           }

           protected void onPostExecute(String result) {
                  doSomethingWithResult(result);
           }
     }

然后你这样称呼它:

      new DoSomethingTask().execute("string parameter");

顺便说一下,在这里阅读有关AsyncTask的更多信息:http://developer.android.com/reference/android/os/AsyncTask.html