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();