【发布时间】:2014-01-21 15:36:42
【问题描述】:
我正在尝试将单个“字符串”传递给 AsyncTask。找了一整天,还是没找到。我在ArrayList 中有一些数据,我得到一个数据(字符串)到AsyncTask,但它不起作用。但是当我用引号传递字符串时,它的工作原理。这是我来自ArrayList 的第一个示例代码:
ArrayList<String> example= new ArrayList<String>();//we consider it have data
new Mytask().execute(example.get(0).toString());
这是我的第二个带单引号字符串的代码:
String example="exm";
new Mytask().execute(example);
这是我的 AsyncTask 代码:
@Override
protected String doInBackground(String... params) {
String str = params[0];
return str;
}
我对这两种方法都使用了 AsyncTask 代码:ArrayList 和单个字符串。但它只适用于带引号的字符串,我一直在尝试这样的另一种方法,但仍然无法正常工作:
ArrayList<String> example= new ArrayList<String>();
String exmpl=example.get(0).toString();
new Mytask().execute(exmpl);
请帮助我,我的错误在哪里,我该如何解决这个问题。谢谢
更新:这是我的完整代码:
public class MasterTokoActivity extends Activity{
TextView new_namaToko,new_alamat;
Spinner new_provinsi,new_kota,new_kecamatan;
mydatabase db;
ProgressBar load_prov,load_kota,load_kec;
ArrayList<String> propinsi = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mastertoko);
new_namaToko = (TextView) findViewById(R.id.new_namaToko);
new_alamat = (TextView) findViewById(R.id.new_alamat);
new_provinsi = (Spinner) findViewById(R.id.new_provinsi);
new_kota = (Spinner) findViewById(R.id.new_kota);
load_prov = (ProgressBar) findViewById(R.id.load_prov);
load_kota = (ProgressBar) findViewById(R.id.load_kota);
new MyasyncTask().execute();
new_provinsi.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){
new MyasyncTaskkota().execute(propinsi.get(pos));
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
public class MyasyncTask extends AsyncTask<String, Integer, Integer>{
@Override
public void onPreExecute() {
load_prov.setVisibility(View.VISIBLE);
new_provinsi.setClickable(false);
new_provinsi.setEnabled(false);
}
@Override
protected Integer doInBackground(String... arg0) {
// TODO Auto-generated method stub
int result=-1;
db = new mydatabase(getApplicationContext());
propinsi=db.ambilProvinsi();
if(propinsi.size()!=0)
{
result=1;
}
return result;
}
@Override
protected void onPostExecute(Integer result){
super.onPostExecute(result);
if(result==1){
ArrayAdapter<String> adapterProv = new ArrayAdapter<String>(MasterTokoActivity.this,android.R.layout.simple_spinner_item, propinsi);
adapterProv.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
new_provinsi.setAdapter(adapterProv);
}
load_prov.setVisibility(View.INVISIBLE);
new_provinsi.setClickable(true);
new_provinsi.setEnabled(true);
}
}
public class MyasyncTaskkota extends AsyncTask<String, Integer, Integer>{
ArrayList<String> kota = new ArrayList<String>();
@Override
public void onPreExecute() {
load_kota.setVisibility(View.VISIBLE);
new_kota.setClickable(false);
new_kota.setEnabled(false);
}
@Override
protected Integer doInBackground(String... prov) {
// TODO Auto-generated method stub
int result=-1;
db = new mydatabase(getApplicationContext());
kota=db.ambilKota(prov[0]);
if(kota.size()!=0)
{
result=1;
}
return result;
}
@Override
protected void onPostExecute(Integer result){
super.onPostExecute(result);
if(result==1){
ArrayAdapter<String> adapterKota = new ArrayAdapter<String>(MasterTokoActivity.this,android.R.layout.simple_spinner_item, kota);
adapterKota.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
new_kota.setAdapter(adapterKota);
adapterKota.notifyDataSetChanged();
}
load_kota.setVisibility(View.INVISIBLE);
new_kota.setClickable(true);
new_kota.setEnabled(true);
}
}
}
这是我的数据库助手中的ambilProvinsi() 方法:
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;
}
并且logCat中没有错误。
【问题讨论】:
-
不需要使用example.get(0).toString(),使用example.get(0)即可。它已经是一个 ArrayList
(),所以使用 toString() 是多余的。 -
这是什么意思,“//我们认为它有数据”?在您调用
get(0)之前它是否有数据? -
我也已经在使用
example.get(0)。但它也不起作用 -
@codeMagic 它有数据,然后我打电话给
get(0) -
当你说“它不工作”时,你的意思是什么? logcat 说什么?
标签: android arraylist android-asynctask