Передача списка из 1-го действия в 3-е действие

У меня есть активность экрана-заставки (АКТИВНОСТЬ A), которая по завершении загрузки открывает АКТИВНОСТЬ B.

АКТИВНОСТЬ B ** состоит из кнопки, которая открывает **АКТИВНОСТЬ C.

ДЕЙСТВИЕ A загружает список с помощью асинхронной задачи

Я хочу, чтобы этот загруженный список отображался в ACTIVITY C при открытии

Я прочитал много сообщений о том, как передавать значения из 1-го действия в 3-е, и пытался реализовать все это, но ничего не помогло.

Evven попытался передать объект списка через намерения из ACTIVITY A > ACTIVITY B > ACTIVITY C, но это не сработало.

Наконец, я использовал «библиотеку jacksons», чтобы преобразовать загруженный список в jsonstring, затем поместить его в общие настройки в ACTIVITY A, затем извлечь jsonstring из общих настроек, скрыть его обратно в объект списка в ** ACTIVITY C* * и отобразить список

Но список не отображается

Что делать и есть ли лучший процесс

заставка (АКТИВНОСТЬ A)

public class SplashActivity extends Activity{

    List<ParseObject> ob;
    List<CodeList> codelist = null;
    ObjectMapper mapper;
    SearchPreferences searchpref;

    @Override
    public void onCreate(Bundle savedInstanceState){
        // TODO: Implement this method
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        mapper = new ObjectMapper();
        searchpref = new SearchPreferences();

        new DataTask().execute();
    }

    public class DataTask extends AsyncTask<Void, Void, List<CodeList>>{
        @Override
        protected List<CodeList> doInBackground(Void[] p1){    
            codelist = new ArrayList<CodeList>();
            try {
                ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("InterActivity");

                query.orderByAscending("_created_at");

                ob = query.find();
                for (ParseObject inter : ob) {
                    CodeList map = new CodeList();
                    map.setIntroduction((String) inter.get("intro"));
                    codelist.add(map);
                }
                return codelist;
            } 
            catch (ParseException e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(List<CodeList> result){
            try{
                String jsonsearchlist = mapper.writeValueAsString(result);
                Intent i = new Intent(SplashActivity.this, MainActivity.class);

                searchpref.save(SplashActivity.this, jsonsearchlist);

                startActivity(i);
            }
            catch (JsonProcessingException e){}
        }
    }
}

АКТИВНОСТЬ C

public class SearchActivity extends Activity{

    protected  EditText searchedittext;
    ImageButton searchButton;
    List<ParseObject> ob;
    List<CodeList> splashcodes;
    FinalAdapter fnladapter;

    SearchPreferences searchpref;
    ObjectMapper mapper;

    @Override
    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        setContentView(R.layout.search_layout);

        searchpref = new SearchPreferences();
        mapper = new ObjectMapper();

        String jsonsearchobj = searchpref.getValue(SearchActivity.this);

        try{
             splashcodes = (List<CodeList>) mapper.readValue(jsonsearchobj, CodeList.class);

            final ListView searchedlist = (ListView) findViewById(R.id.searchlist);
            fnladapter = new FinalAdapter(SearchActivity.this, splashcodes);
            searchedlist.setAdapter(fnladapter);
        }
        catch (IOException e){}
    }
}

person user5894647    schedule 04.03.2016    source источник
comment
то, что ты хочешь ? я не понял.   -  person Arpit Patel    schedule 04.03.2016
comment
@ArpitPatel Я хочу, чтобы список загрузки в действии A отображался в действии C   -  person user5894647    schedule 04.03.2016
comment
@ArpitPatel и действие A напрямую открывает действие B без действия C   -  person user5894647    schedule 04.03.2016
comment
Используйте интерфейс Parcelable. developer.android.com/reference/android/os/Parcelable.html   -  person Sreehari    schedule 04.03.2016
comment
› Evven попытался передать объект списка через намерения из ACTIVITY A › ACTÌVITY B › ACTIVITY C, но это не сработало. Это правильный подход. Какие проблемы у вас возникли?   -  person Vasily Kabunov    schedule 04.03.2016
comment
вы хотите вызвать задачу asnyc в другой активности и показать в списке с другой активностью?   -  person Arpit Patel    schedule 04.03.2016
comment
@VasilyKabunov у меня не отображался список   -  person user5894647    schedule 04.03.2016
comment
@ArpitPatel да точно   -  person user5894647    schedule 04.03.2016
comment
что вы пытаетесь передать массив объектов или один объект?   -  person sunil sunny    schedule 04.03.2016
comment
@sunilsunny объект списка   -  person user5894647    schedule 04.03.2016
comment
Что такое настройки поиска?   -  person avinash    schedule 04.03.2016
comment
stackoverflow.com/questions/2736389/ вы пробовали это..   -  person sunil sunny    schedule 04.03.2016
comment
@avinash это мой класс общих настроек, который я создал, я должен его опубликовать   -  person user5894647    schedule 04.03.2016
comment
@sunilsunny это полезно, когда вы общаетесь между двумя действиями: ДЕЯТЕЛЬНОСТЬ A › ДЕЯТЕЛЬНОСТЬ B через намерение, где АКТИВНОСТЬ A ЯВЛЯЕТСЯ НАЧАЛЬНОЙ ДЕЯТЕЛЬНОСТЬЮ B   -  person user5894647    schedule 04.03.2016


Ответы (2)


Вы были на правильном пути: прокрутите свою информацию через 2-е действие. Обратите внимание, что CodeList должен быть сериализуемым.

public class SplashActivity extends Activity{
 ...
 protected void onPostExecute(ArrayList<CodeList> result){
   Intent intent = new Intent(SplashActivity.this, SoCalledBActivity.class);
   intent.putExtra("YOUR_UNIQUE_KEY",result);
   this.startActivity(intent);
 }
}

public class SoCalledBActivity extends Activity{
 ...
 Button trigger = (Button) findViewById(R.id.trigger);
    trigger.setOnClickListener(new Button.OnClickListener() {
        public void onClick(View v) {
          //get result list
          ArrayList<CodeList> result = (ArrayList<CodeList>) this.getIntent().getExtras().get("YOUR_UNIQUE_KEY");
          Intent intent = new Intent(SoCalledBActivity.this, SearchActivity .class);
          //add list for C activity
          intent.putExtra("YOUR_UNIQUE_KEY",result);
          this.startActivity(intent);
        }
    });

public class SearchActivity extends Activity{
  ...
  public void onCreate(Bundle savedInstanceState){
   //extract list
   ArrayList<CodeList> result = (ArrayList<CodeList>) this.getIntent().getExtras().get("YOUR_UNIQUE_KEY");
   //do whatever you want with your list...
  }
...
}
person Lonzak    schedule 04.03.2016
comment
Thnx, я постараюсь сообщить вам - person user5894647; 04.03.2016
comment
В АКТИВНОСТИ A, если я поставлю намерение.putExtra(YOUR_UNIQUE_KEY,result); , это дает мне сообщение об ошибке, говорящее о том, что нет применимого метода для (java.lang.string, java.util.list‹имя моего пакета›, поэтому я преобразовал его следующим образом i.putExtra(MYLIST, (Serializable)result); это нормально - person user5894647; 04.03.2016
comment
Да, вы правы - он должен быть сериализуемым, поэтому вы не можете использовать «Список» ... но, например. ArrayList должен работать. И, конечно же, CodeList должен реализовать интерфейс Serializable... - person Lonzak; 04.03.2016
comment
спасибо, братан, это работает, но я получаю желтую строку под списком приведения в действии b и его сообщение: ПРИВЕДЕНИЕ НЕБЕЗОПАСНО, ПОТОМУ ЧТО НЕВОЗМОЖНО ПРОВЕРИТЬ ВО ВРЕМЯ ВЫПОЛНЕНИЯ, ЯВЛЯЕТСЯ ЛИ ЭКЗЕМПЛЯР ТИПА javva, lang.object S ТИПА java. util.list‹название моего пакета› - person user5894647; 04.03.2016
comment
даже это дает мне такое же предупреждение - person user5894647; 04.03.2016
comment
Да это нормально. Добавьте @SuppressWarnings(unchecked)... Все поведение описано здесь, если вам интересно: stackoverflow.com/questions/509076/ или stackoverflow.com/questions/14642985/ - person Lonzak; 04.03.2016

Создайте глобальный класс и поместите этот список в этот класс. Когда вы закончите заполнение списка, получите доступ к данным списка в Упражнении C.

person Gvs13    schedule 04.03.2016
comment
Я даже думал об этом процессе, но не понимал, что не так с методом, которым я следовал - person user5894647; 04.03.2016
comment
Просто создайте глобальный класс следующим образом: public class Globals extends Application { //yourlist } //Добавить в файл манифеста android:name=.Globals Список доступа следующим образом; Глобальные переменные g = (Глобальные переменные) getApplication; г.список. - person Gvs13; 04.03.2016
comment
Я должен попробовать, и я дам вам знать, спасибо - person user5894647; 04.03.2016
comment
Еще один способ, который я использовал, - сделать ваш класс сериализуемым и передать его в порядке Activity B->Activity C. - person Gvs13; 04.03.2016