2015-07-06 6 views
0

Я посылаю JSONString от MainActivity к GetLLRD классу, отправляемые на сервер от MyAsyntask внутреннего класса в GetLLRD классе, то я получаю ArrayList<ItemDTO> data объект с сервера который я хочу передать в map Activity.Начало активности от onPostExecute() метода и передать Список_массивы ему

Как я могу начать map Activity от метода onPostExecute() и передать ArrayList<ItemDTO> data?

Я ценю любую помощь.

GetRRLD класс

public class GetLLRD { 


    public void post_selected(String json) { 
     new MyAsyncTask().execute(json); 
    } 

    class MyAsyncTask extends AsyncTask<String, Integer, List<ItemDTO>> { 


     @Override 
     protected List<ItemDTO> doInBackground(String... params) { 

      . 
      . 
      . 
      . 

       Gson gson = new Gson(); 
       Type listType = new TypeToken<List<ItemDTO>>() { 
       }.getType(); 
       ArrayList<ItemDTO> data = gson.fromJson(sb.toString(), listType); 
      . 
      . 
      . 
      .  


      return null; 

     } 

     protected void onPostExecute(ArrayList<ItemDTO> result) { 

      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        new MyAsyncTask().execute(); 
        System.out.println("The method onPostExcute() in GETLLRD class was invoked again"); 
       } 
      }, 1*30 * 1000); 

      if (result != null) { 
       Intent intent = new Intent(GetLLRD.this, Map.class); 
       intent.putStringArrayListExtra("selected_route", result); 
       startActivity(intent);    
       startActivity(new Intent(getApplicationContext(), Map.class)); 

      } 

     } 

    } 
} 

MapDataJSON класс: импорт java.util.ArrayList;

общественный класс MapDataJSON { Элементы ArrayList;

public MapDataJSON(ArrayList<ItemDTO> items) { 
    super(); 
    this.items = items; 
} 

public ArrayList<ItemDTO> getItems() { 
    return items; 
} 

public void setItems(ArrayList<ItemDTO> items) { 
    this.items = items; 
} 

public static class ItemDTO { 
    double latitude; 
    double longitude; 
    int route; 
    String direction; 

    public ItemDTO(double latitude, double longitude, int route, 
      String direction) { 
     super(); 
     this.latitude = latitude; 
     this.longitude = longitude; 
     this.route = route; 
     this.direction = direction; 
    } 

    public double getLatitude() { 
     return latitude; 
    } 

    public double getLongitude() { 
     return longitude; 
    } 

    public int getRoute() { 
     return route; 
    } 

    public String getDirection() { 
     return direction; 
    } 

    public void setLatitude(double latitude) { 
     this.latitude = latitude; 
    } 

    public void setLongitude(double longitude) { 
     this.longitude = longitude; 
    } 

    public void setRoute(int route) { 
     this.route = route; 
    } 

    public void setDirection(String direction) { 
     this.direction = direction; 
    } 
} 

}

+0

попробовать это http://stackoverflow.com/questions/15747727/pass-arraylist-of-user-defined-objects -to-intent-android –

ответ

1
Try this code : <br/> 

    public class GetLLRD { 


     public void post_selected(Context context,String json) { 
      new MyAsyncTask().execute(json); 
     } 

     class MyAsyncTask extends AsyncTask<String, Integer, List<ItemDTO>> { 
    Context context; 
    MyAsyncTask(Context context) 
    { 
    this.context=context; 
    } 
      @Override 
      protected List<ItemDTO> doInBackground(String... params) { 

       . 
       . 
       . 
       . 

        Gson gson = new Gson(); 
        Type listType = new TypeToken<List<ItemDTO>>() { 
        }.getType(); 
        ArrayList<ItemDTO> data = gson.fromJson(sb.toString(), listType); 
       . 
       . 
       . 
       .  


       return null; 

      } 

      protected void onPostExecute(ArrayList<ItemDTO> result) { 

       new Handler().postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         new MyAsyncTask().execute(); 
         System.out.println("The method onPostExcute() in GETLLRD class was invoked again"); 
        } 
       }, 1*30 * 1000); 

       if (result != null) { 
        Intent intent = new Intent(context, Map.class); 
        intent.putStringArrayListExtra("selected_route", result); 
        context.startActivity(intent);    


       } 

      } 

     } 
    } 
+0

Вы просто использовать контекст только .. –

+0

я получаю эти ошибки 'Конструктор Intent (GetLLRD, класс ) является undefined' и' Метод putStringArrayListExtra (String, ArrayList ) в типе Intent не применяется для аргументы (String, ArrayList ) '? –

+0

Я отредактировал код plz еще раз попробовал –

0

Вы, возможно, считается использованием геттер/сеттер методы для вашего ArrayList?

public static List<String> getList() { 
    return list; 
} 

public static setList(List<String> list) { 
    this.list = list; 
} 

Так что я имею в виду, как только вы получили ваш ArrayList от сервера, вы храните его в статический метод сеттер.

setList(yourArrayList); 

Затем вы начинаете новый вид деятельности, а также использовать метод Getter, указывая на ваш ArrayList в вашей предыдущей деятельности.

PrevActivity.getList(); 

Не для копирования/вставки, а просто для мысли.

0

Вы можете реализовать Serializable интерфейс в вашем modelClass ItemDTO, а затем передать serializableArraylist используя намерение

+0

Как я могу начать работу из класса non-activity? –

+0

Я предоставит вам решение. –

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