2014-10-21 5 views
-1

У меня есть класс с AsyncTask, который собирает данные для меня. Я создал объект этого класса, создаю ArrayList, и когда он возвращается к другому классу, этот ArrayList становится пустым.Объект становится пустым android

Это класс для хранения и вычисления данных

private Context context; 
public ArrayList<Category> categories; 

public CategoriesParser(Context context) { 
    this.context = context; 
} 

public void startParse(){ 
    this.categories = new ArrayList<Category>(); 
    new JSONParse().execute(); 
} 
private static String url = "http://..."; 
private static final String TAG_CAT = "categories"; 
private static final String TAG_ID = "id"; 
private static final String TAG_TITLE = "title"; 
private static final String TAG_PARENT = "parent"; 

JSONArray android = null; 

public ArrayList<Category> getCategories(){ 
    return categories; 
} 

private class JSONParse extends AsyncTask<String, String, JSONObject> { 
    private ProgressDialog pDialog; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     pDialog = new ProgressDialog(context); 
     pDialog.setMessage("Подождите пожалуйста ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 
    @Override 
    protected JSONObject doInBackground(String... args) { 
     JSONParser jParser = new JSONParser(); 
     // Getting JSON from URL 
     JSONObject json = jParser.getJSONFromUrl(url); 
     return json; 
    } 
    @Override 
    protected void onPostExecute(JSONObject json) { 
     try { 
      // Getting JSON Array from URL 
      android = json.getJSONArray(TAG_CAT); 
      for(int i = 0; i < android.length(); i++){ 
       JSONObject c = android.getJSONObject(i); 
       // Storing JSON item in a Variable 
       String id = c.getString(TAG_ID); 
       String title = c.getString(TAG_TITLE); 
       String parent = c.getString(TAG_PARENT); 
       categories.add(new Category(id, title, parent)); //data is STILL here 
      } 
      pDialog.dismiss(); 
      //even now 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
} 

Main_Activity

this.catParser = new CategoriesParser(this); 
this.catParser.startParse(); 

mTitle = (String)getTitle(); //and here catParser is empty. 

ответ

0

ArrayList пуст, как задача все еще работает. Сделайте то, что вам нужно сделать в методе OnPostExecute, оно безопасно выполнено в потоке пользовательского интерфейса, и вы можете все, что вам нужно здесь.

+0

Я сделал это в OnPostExecute, а затем использовал этот объект в другом классе, и там он пуст –

+0

Мы говорим об асинхронной задаче здесь, когда вы используете объект в другом классе, это все еще продолжается, OnPostExExute имеет еще не выполнен. – ToYonos

Смежные вопросы