你好我正在使用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] 我已经删除了吐司,但我仍然没有收到从被叫方传递给异步任务的正确字符串。有什么想法吗?
答案 0 :(得分:4)
Toast.makeText(getApplicationContext(), "ID : " + id_warkah, Toast.LENGTH_LONG).show();
需要在UI线程上执行Toast。将其移至onPostExcuted
或使用runOnUiThread
您的String
是args[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