У меня есть 3 действия - активность входа, активность на главной странице, активность профиля. Активность входа вызовет активность главной страницы, а активность главной страницы вызовет активность профиля. Как передать данные из активности входа в активность профиля? Должен ли он сначала передавать данные из активности входа на главную страницу, а затем переходить к активности профиля из активности главной страницы? Или есть ли другой способ передачи данных? Благодаря!Активность активности Android Studio
ответ
Вы можете сделать это ... или вы могли бы хранить данные в постоянном хранилище и считывать данные по мере необходимости.
Узнайте о SharedPreferences
здесь - Saving Key-Value Sets | SharedPreferences
Сохранение данных выглядит следующим образом: выглядит
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score), newHighScore); editor.commit();
Извлечение данных как:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.string.saved_high_score_default); long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
Узнайте о SQLite Database
здесь - Saving Data in SQL Databases | SQLite Database
Сохранение данных выглядит следующим образом: выглядит
// Gets the data repository in write mode SQLiteDatabase db = mDbHelper.getWritableDatabase(); // Create a new map of values, where column names are the keys ContentValues values = new ContentValues(); values.put(FeedEntry.COLUMN_NAME_TITLE, title); values.put(FeedEntry.COLUMN_NAME_SUBTITLE, subtitle); // Insert the new row, returning the primary key value of the new row long newRowId = db.insert(FeedEntry.TABLE_NAME, null, values);
Извлечение данных как:
SQLiteDatabase db = mDbHelper.getReadableDatabase(); // Filter results WHERE "title" = 'My Title' String selection = FeedEntry.COLUMN_NAME_TITLE + " = ?"; String[] selectionArgs = { "My Title" }; // How you want the results sorted in the resulting Cursor String sortOrder = FeedEntry.COLUMN_NAME_SUBTITLE + " DESC"; Cursor cursor = db.query( FeedEntry.TABLE_NAME, // The table to query projection, // The columns to return selection, // The columns for the WHERE clause selectionArgs, // The values for the WHERE clause null, // don't group the rows null, // don't filter by row groups sortOrder // The sort order ); List itemIds = new ArrayList<>(); while(cursor.moveToNext()) { long itemId = cursor.getLong( cursor.getColumnIndexOrThrow(FeedEntry._ID)); itemIds.add(itemId); } cursor.close();
, но эти действия находятся в одном приложении ,,, база данных и SharedPreferences не нужны .. это хорошо для обмена данными между несколькими приложениями. –
Есть два способа передачи значений между различными видами деятельности в Android:
1. Использование намерения:
Пример:
В Вход деятельности, поместите следующий код внутри OnClickListiner:
Intent intent = new Intent(getApplicationContext(), mainActivity.class);
intent.putExtra("username", usernameVariable);
intent.putExtra("password", passwordVariable);
startActivity(intent);
Затем, на mainActivity, для получения значений используйте следующий код:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view);
Intent intent = getIntent();
String u = intent.getStringExtra("username");
String p = intent.getStringExtra("password");
// note: the arguments should match the same as its in the loginActivity
}
2. Использование статических переменных:
Пример:
На LoginActivity, создать два статических атрибутов. Как следующее:
Public Class LoginActivity{
public static String username;
public static String password;
protected void onCreate(Bundle savedInstanceState) {
...
}
}
Тогда в классе mainActivity использовать следующий код, чтобы получить эти значения:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view);
String u=LoginActivity.username;
String p=LoginActivity.password;
}
Надежда это решить вашу проблему ...
Я использую намерение для вызова активности. Активность входа - это моя первая деятельность. Я вызываю основное действие из активности входа, затем я вызываю активность профиля из основного действия. Для метода intend как передать данные из активности входа в активность профиля? –
С намерением, вы можете прикрепить значение, которое вы хотите отправить из одной активности, в другую. Посмотрите на мой код, который я вам четко показал. –
Существует еще один способ которые вы можете использовать, создайте одноэлементный класс и сохраните значение и используйте его.
public final class ProfileDataModel {
private static ProfileDataModel instance;
private String userName;
private String address;
private ProfileDataModel() {
}
/**
* Get Instance for Profile
* @return
*/
public static ProfileDataModel getInstance() {
if (instance == null){
instance = new ProfileDataModel();
}
return instance;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
// Use cases
//Set the data
ProfileDataModel.getInstance().setAddress("Data from login response");
ProfileDataModel.getInstance().setUserName("As per request/response");
//Get the data
String address = ProfileDataModel.getInstance().getAddress();
String userName = ProfileDataModel.getInstance().getUserName();
Либо вы используете 'SharedPreference', либо укажите значение объявления, которое вы хотите передать как' Static' для глобального использования. – W4R10CK