2016-10-13 1 views
1

Я хочу создать список объектов, доступных для большей активности. Я думал создать класс со списком объекта (а не массивом). Я использовал это ...Создайте список объектов, которые можно использовать при увеличении активности

public class List{ 
    Object object1 = new Object("this", 59, true) 
    ... 
    } 

И активность

public class ListActivity extends AppCompatActivity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout); 
     ... 
     ArrayList<Object> array = new ArrayList<>(); 
     array.add(Object(List.object1)); 
     ...}} 

в List.object1 есть ожидаемый метод ошибки вызова.

Есть более простой способ хранения объектов и более эффективный?

+0

Вы можете расширить класс приложения и создать глобальный список объектов, доступ к которым можно получить в любом месте приложения – Inducesmile

+0

@NollyJ Если это то, что происходит после OP. Честно говоря, я не совсем понимаю, чего хочет или нуждается OP. Возможно, это просто создание списка объектов в одном действии и сделать его доступным для другого действия. –

+0

Да, это непонятно, но я основывал свою интуицию на этой части утверждения - «больше активности» – Inducesmile

ответ

0

Я основываю это решение, которое вы хотите создать список объектов и использовать его в другом классе деятельности.

Первое решение - Вы можете создать собственный класс приложения и создать экземпляр своего объекта в методе обратного вызова onCreate. Это даст вам доступ к списку объектов в другом классе

public class CustomApplication extends Application { 

private List<YourClassName> listOfObjects; 

@Override 
public void onCreate() { 
    super.onCreate(); 

    listOfObjects = new ArrayList<YourClassName>(); 
} 

private List<YourClassName> getListOfObject(){ 
    return listOfObjects; 
} 
} 

Затем к нему доступ, вы можете использовать эту строку кода

List<YourClassName> objectList = ((CustomApplication)getApplication()).getListOfObject(); 

Второе решение - Вы можете использовать класс Wrapper чтобы обернуть список объектов, как показано ниже.

Если у вас есть этот класс пользователей

public class User { 
private String name; 
private String email; 
private String username; 


public User(String name, String email, String username) { 
    this.name = name; 
    this.email = email; 
    this.username = username; 
} 

public String getName() { 
    return name; 
} 

public String getEmail() { 
    return email; 
} 

public String getUsername() { 
    return username; 
} 
} 

то класс обертка будет выглядеть следующим образом

public class Wrapper { 
private List<User> users; 

public Wrapper(List<User> users){ 
    this.users = users; 
} 

public List<User> getUsers(){ 
    return users; 
} 
} 

Вы можете преобразовать класс Wrapper в Json Струнный

Gson gson = new Gson(); 
String jsonString = gson.toJson(Wrapper); 

Вы может хранить вас jsonString в sharepreference, подобном этому

SharedPreferences prefs = getSharedPreferences("IDENTIFIER", Context.MODE_PRIVATE); 
SharedPreferences.Editor edits = prefs.edit(); 
edits.putString("LIST_OBJECT", jsonString); 
edits.apply(); 

Чтобы получить обратно список пользователей в классе, вы будете использовать приведенный ниже код.Получить строку JSON в sharedpreference как этот

String jListObject = prefs.getString("LIST_OBJECT", "") 

затем получить список пользовательских объектов

Wrapper listObjectWrapper = gson.fromJson(stringObject, Wrapper.class); 
List<User> users = listObjectWrapper.getUsers(); 

Третье решение - вы можете использовать TypeToken для преобразования JSON строку в список объектов, как в примере ниже

Создать список объектов пользователя

List<User> objList = new ArrayList<User>(); 
objList.add(new User("high", "zero.yahoo.com", "zero")); 
objList.add(new User("low", "one.yahoo.com", "one")); 

преобразовать объект списка в строку

String json = new Gson().toJson(objList); 

магазин строка JSON в sharedpreference на примере во втором растворе

При извлечении строки JSON, вы можете переконвертировать его в список объектов Пользователя, как показано ниже

Type type = new TypeToken<List<DataObject>>(){}.getType(); 
List<DataObject> inpList = new Gson().fromJson(jsonString, type); 

Не забудьте добавить эту строку в файл build.gradle приложения

compile 'com.google.code.gson:gson:2.4' 
+0

Спасибо, можно искать внутри объектов? Как только имя, только имя пользователя или оба (за исключением электронной почты)? – Pablito

+0

Да, после этой строки Список users = listObjectWrapper.getUsers(); теперь у вас есть список объектов. Чтобы получить объект или все объекты в списке, вы можете зацикливать список пользователей (User singleUser: users) {singleUser.getName()}; вернет имя. – Inducesmile

0

вы можете хранить ваши данные в настройках, как это: settingsservice:

public class SettingsService { 
    private static String KEY = Constants.SETTINGS_KEY; 
    private static Context mContext; 

    public static SettingsModel settings; 

    public SettingsService(){ 
     mContext = YourApplicationClass.getApplicationContext(); 
     if(settings == null){ 
      settings = getSettings(); 
     } 
    } 

    public static void saveSettings(SettingsModel settings){ 
     if(settings != null){ 
      SharedPreferences.Editor editor = mContext 
        .getSharedPreferences(KEY, Activity.MODE_PRIVATE).edit(); 
      SettingsService.settings = settings; 
      Gson gson = new Gson(); 
      String jsonSettings = gson.toJson(settings); 
      editor.putString("settings", jsonSettings); 
      editor.commit(); 
     } 
    } 

    public static void saveSettings(){ 
     if(settings == null){ 
      settings = new SettingsModel(); 
     } 
     SharedPreferences.Editor editor = mContext 
       .getSharedPreferences(KEY, Activity.MODE_PRIVATE).edit(); 
     Gson gson = new Gson(); 
     String jsonSettings = gson.toJson(settings); 
     editor.putString("settings", jsonSettings); 
     editor.commit(); 
    } 


    private static SettingsModel getSettings() { 
     SharedPreferences editor = mContext.getSharedPreferences(KEY, 
       Activity.MODE_PRIVATE); 
     try{ 
      String jsonSettings = editor.getString("settings","settings"); 
      Gson gson = new Gson(); 
      settings = gson.fromJson(jsonSettings, SettingsModel.class); 
     }catch (Exception e){ 
      settings = new SettingsModel(); 
     } 

     return settings; 
    } 
} 

создать настройки модели независимо от объектов, которые вы хотите внутри:

public class SettingsModel { 
    public String email; 
    public String password; 
    // anything you need else 
} 

затем из любого места в ваших кодов:

SettingsService.settings.email = "your email"; 
SettingsService.saveSettings(); 

также из любого места в вашем коде:

String myEmail = SettingsService.settings.email; 

также убедитесь, что у вас есть в вашем Gradle:

compile 'com.google.code.gson:gson:2.4' 
Смежные вопросы