2015-08-29 2 views
0

как использование «делать в то время как» в AsyncTask для добавления в список массива Пожалуйста, объясните, мобильный код, спасибо всем, кто откликнется, как с помощью AsyncTask добавить в ArrayList

код:

public List<msgstore> results =new ArrayList<msgstore>(); 


    AsyncTask<Void, Void, Void>task=new AsyncTask<Void, Void, Void>(){ 
          ProgressDialog pd = new ProgressDialog(mContext); 
          @Override 
          protected void onPreExecute() { 
           pd.setTitle("Process"); 
           pd.setMessage("Processing ...."); 
           pd.setCancelable(false); 
           pd.setIndeterminate(true); 
           pd.show(); 
          } 


          @Override 
          protected Void doInBackground(Void... params) { 

           do{ 

             String d=mCur.getString(mCur.getColumnIndex("address")); 
             String p= mCur.getString(mCur.getColumnIndex("phone")); 
             int k=mCur.getInt(mCur.getColumnIndex("key")); 
             int i=mCur.getInt(mCur.getColumnIndex("_id")); 
             long t=mCur.getLong(mCur.getColumnIndex("registertime")); 
             results.add(new msgstore(d,p,k,i,t)); 


            }while(mCur.moveToNext());     
           return null; 
          } 


          @Override 
          protected void onPostExecute(Void result) { 
           pd.dismiss(); 
          } 
         }; 
         task.execute((Void[])null); 
+0

Можете ли вы объяснить, что проблема, которую вы испытываете? – codeMagic

+0

@codeMagic, не работает, приложение для сбоя – Negar

+1

Если приложение терпит крах, вам необходимо предоставить стек из трещины, чтобы мы могли помочь – codeMagic

ответ

1

Я не У меня достаточно репутации, чтобы комментировать, поэтому я добавлю свой комментарий здесь. Где определяется mCur? Вы делаете цикл do/while, используя moveToNext, что очень опасно, потому что курсор может быть пустым.

Попробуйте делать то время цикла вместо

while(mCur.moveToNext()) { 
    String d=mCur.getString(mCur.getColumnIndex("address")); 
    String p= mCur.getString(mCur.getColumnIndex("phone")); 
    int k=mCur.getInt(mCur.getColumnIndex("key")); 
    int i=mCur.getInt(mCur.getColumnIndex("_id")); 
    long t=mCur.getLong(mCur.getColumnIndex("registertime")); 
    results.add(new msgstore(d,p,k,i,t)); 
} 

быть также обязательно закрыть курсор после