Android Studio活动传递数据

时间:2017-02-05 15:23:47

标签: android android-activity

我有3项活动 - 登录活动,主页活动,个人资料活动。登录活动将调用主页面活动,主页面活动将调用配置文件活动。如何将数据从登录活动传递到配置文件活动?是否必须首先将数据从登录活动传递到主页活动,然后从主页活动传递到配置文件活动?或者有没有其他方法来传递数据?谢谢!

3 个答案:

答案 0 :(得分:1)

您可以这样做......或者您可以将数据存储在持久存储中,并在需要时回读。

在此处了解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();
    

答案 1 :(得分:0)

在Android中的活动之间传递值有两种方法:

1。使用意图:
例如:
在Login Activity中,将以下代码放在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;
}

希望它能解决你的问题...

答案 2 :(得分:0)

还有一种方法可以使用创建单例类并存储值并使用它。

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();