Android异步任务:传递单个;“字符串”;从ArayList开始执行
我正在尝试将单个“字符串”传递给Android异步任务:传递单个;“字符串”;从ArayList开始执行,android,arraylist,android-asynctask,Android,Arraylist,Android Asynctask,我正在尝试将单个“字符串”传递给AsyncTask。我找了一整天,还是找不到。我在ArrayList中有一些数据,我得到一个数据(字符串)到AsyncTask,但它不起作用。但当我传递带引号的字符串时,它就起作用了。下面是我在ArrayList中的第一个示例代码: ArrayList<String> example= new ArrayList<String>();//we consider it have data new Mytask().execute(exampl
AsyncTask
。我找了一整天,还是找不到。我在ArrayList
中有一些数据,我得到一个数据(字符串)到AsyncTask
,但它不起作用。但当我传递带引号的字符串时,它就起作用了。下面是我在ArrayList
中的第一个示例代码:
ArrayList<String> example= new ArrayList<String>();//we consider it have data
new Mytask().execute(example.get(0).toString());
这是我的异步任务代码:
@Override
protected String doInBackground(String... params) {
String str = params[0];
return str;
}
我对两种方法都使用了AsyncTask代码:ArrayList和single string。但它只适用于带引号的字符串,我一直在尝试另一种类似的方法,但仍然不起作用:
ArrayList<String> example= new ArrayList<String>();
String exmpl=example.get(0).toString();
new Mytask().execute(exmpl);
logCat中没有错误。正如我在评论中提到的,使用toString()是多余的,所以您应该去掉它。另外,您确定没有传递空/空数据吗?您肯定没有检查您的输入…首先,您应该更改:
@Override
protected String doInBackground(String... params) {
String str = params[0];
if(str == null)
throw new NullPointerException("Provided null string to: " + getClass().getSimpleName());
return str;
}
谢谢你们的回答,我所有的代码现在都可以用了,没什么需要修改的。
问题来自我的数据编码。一旦我将数据编码更改为utf8,我的应用程序就会正常运行。
Charset
适用于Android,这很奇怪。但你们可以尝试在构造函数中传递你们的字符串,我认为它一定能工作
private class MyTask extends AsyncTask<Void, Void, String> {
private final String str;
public MyTask(final String str) {
this.str = str;
}
@Override
protected String doInBackground(Void... params) {
//process this.str and return result
}
//post execute
}
另外,您忘记了在
ambilprovisi()
方法中关闭光标。使用example.get(0)。toString()是不必要的,只需使用example.get(0)。它已经是一个ARAYLIST(),所以使用toSTRIN()是多余的。这意味着什么“/我们认为它有数据”吗?在调用get(0)
之前,它是否有数据?我已经使用了example.get(0)
。但也不是working@codeMagic它有数据,然后我调用get(0)
,当你说“它不工作”时,你是什么意思?logcat怎么说?在我把它传递给asynctask之前,我会检查它。在调用newmytask().execute(example.get(0.toString())之前,我使用toast打印它代码>。它向我展示了您的原始源代码,因为从上面的代码来看,很明显您是在空的ArrayList上调用get。如果这不是您在实际代码中所做的,那么我们应该如何帮助您发现问题?
public ArrayList<String> ambilProvinsi(){
SQLiteDatabase db = getReadableDatabase();
Cursor cur;
ArrayList<String> sv=new ArrayList<String>();
cur = db.query("propinsi", new String []{"nama_propinsi"}, null, null, null, null, null);
cur.moveToFirst();
if (!cur.isAfterLast()){
do{
sv.add(cur.getString(0));
}while (cur.moveToNext());
}
return sv;
}
@Override
protected String doInBackground(String... params) {
String str = params[0];
if(str == null)
throw new NullPointerException("Provided null string to: " + getClass().getSimpleName());
return str;
}
private class MyTask extends AsyncTask<Void, Void, String> {
private final String str;
public MyTask(final String str) {
this.str = str;
}
@Override
protected String doInBackground(Void... params) {
//process this.str and return result
}
//post execute
}
new MyTask(someString).execute();