我試圖將單個「字符串」傳遞給AsyncTask
。我整天都在尋找,但仍然無法得到它。我在ArrayList
有一些數據,我得到一個數據(字符串)到AsyncTask
,它不工作。但是當我用引號傳遞字符串時,它的作品。這是我的第一個例子代碼ArrayList
:Android AsyncTask:從ArayList傳遞單個「字符串」來執行
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);
請幫幫我,哪裏是我的錯,我怎麼能解決這個問題。感謝
UPDATE:這是我的完整代碼:
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()是多餘的。 –
Submersed
這是什麼意思,「//我們認爲它有數據」?在你調用get(0)之前是否有數據? – codeMagic
我也已經使用'example.get(0)'。但它也不起作用 – Nizarhdt