【问题标题】:android studio - how to get text from one activity to another?android studio - 如何将文本从一项活动获取到另一项活动?
【发布时间】:2017-10-12 04:52:38
【问题描述】:

我有一个名为登录活动的类。它登录用户并将用户带到 UserAreaActivity.class。我使用意图将用户名和用户名从 loginactivity 抓取到 UserAreaActivity。

但问题是我得到了另一个名为 Messages 的类。我想从 UserAreaActivity 获取用户名到 Messages。

我尝试使用意图,但当我登录时,它会直接将我带到消息。跳过 UserAreaActivity.class。

如何解决?

loginactivity.class

public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    final EditText etUsername = (EditText) findViewById(R.id.etUsername);
    final EditText etPassword = (EditText) findViewById(R.id.etPassword);
    final TextView tvRegisterLink = (TextView) findViewById(R.id.tvRegisterhere);
    final Button bLogin = (Button) findViewById(R.id.bLogin);

    tvRegisterLink.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
            LoginActivity.this.startActivity(registerIntent);
        }
    });

    bLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String username = etUsername.getText().toString();
            final String password = etPassword.getText().toString();

            // Response received from the server
            Response.Listener<String> responseListener = new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jsonResponse = new JSONObject(response);
                        boolean success = jsonResponse.getBoolean("success");

                        if (success) {
                            String name = jsonResponse.getString("name");


                            Intent intent = new Intent(LoginActivity.this, UserAreaActivity.class);
                            intent.putExtra("name", name);
                            intent.putExtra("username", username);
                            LoginActivity.this.startActivity(intent);


                        } else {
                            AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
                            builder.setMessage("Login Failed")
                                    .setNegativeButton("Retry", null)
                                    .create()
                                    .show();
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            };

            LoginRequest loginRequest = new LoginRequest(username, password, responseListener);
            RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
            queue.add(loginRequest);
        }
    });
}
}

UserAreaActivity.class

public class UserAreaActivity extends AppCompatActivity {

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_area);


    final TextView etusername = (TextView) findViewById(R.id.textView2);
    final TextView etwelcome = (TextView) findViewById(R.id.textView);
    final ImageButton red = (ImageButton) findViewById(R.id.imageButton);
    final ImageButton messages = (ImageButton) findViewById(R.id.imageButton2);
    final ImageButton blue = (ImageButton) findViewById(R.id.imageButton3);
    final ImageButton ping = (ImageButton) findViewById(R.id.imageButton4);




    red.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent registerIntent = new Intent(UserAreaActivity.this, Report.class);
            UserAreaActivity.this.startActivity(registerIntent);

        }
    });

    messages.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent registerIntent = new Intent(UserAreaActivity.this, Messages.class);
            UserAreaActivity.this.startActivity(registerIntent);


        }
    });

    Intent intent = getIntent();
    String name = intent.getStringExtra("name");
    String username = intent.getStringExtra("username");


    String message = "Welcome " + name;
    etwelcome.setText(message);
    etusername.setText(username);

}

messages.class

public class Messages extends AppCompatActivity {

private Button  add_room;
private EditText room_name;

private ListView listView;
private ArrayAdapter<String> arrayAdapter;
private ArrayList<String> list_of_rooms = new ArrayList<>();
private String name;
private DatabaseReference root = FirebaseDatabase.getInstance().getReference().getRoot();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_messages);

    add_room = (Button) findViewById(R.id.btn_add_room);
    room_name = (EditText) findViewById(R.id.room_name_edittext);
    listView = (ListView) findViewById(R.id.listView);


    arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list_of_rooms);

    listView.setAdapter(arrayAdapter);




    add_room.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Map<String,Object> map = new HashMap<String, Object>();
            map.put(room_name.getText().toString(),"");
            root.updateChildren(map);

        }
    });

    root.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Set<String> set = new HashSet<String>();
            Iterator i = dataSnapshot.getChildren().iterator();

            while (i.hasNext()){
                set.add(((DataSnapshot)i.next()).getKey());

            }

            list_of_rooms.clear();
            list_of_rooms.addAll(set);

            arrayAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {



            Intent intent = new Intent(getApplicationContext(),Chat_Room.class);
            intent.putExtra("room_name",((TextView)view).getText().toString() );
            intent.putExtra("user_name", "HERE");
            startActivity(intent);


        }
    });


}


}

【问题讨论】:

  • 使用共享偏好
  • 哦。这和意图相似吗?
  • 您可以使用 Handler 对象来延迟调用,以便 UserAreaActivity 在您指定的时间内可见。
  • 我不知道为什么人们告诉你使用偏好,因为你说问题是活动被跳过。据我所知,只有 Message 活动的入口点位于 UserAreaActivity 点击事件中。你在 onResume() 中做了什么别的吗?
  • 不。我在 UserAreaActivity 中使用了这段代码。 Intent in = new Intent(getApplicationContext(), Messages.class); in.putExtra("用户名", 用户名); UserAreaActivity.this.startActivity(in);并在 Messages.class 上使用它

标签: java android string android-activity


【解决方案1】:

要解决它,您必须使用以下代码 sn-p 来实现 SharedPreferences

SharedPreferences preferences;
SharedPreferences.Editor editor;

private String TAG_USERNAME = "username";

用于设置SharedPreferences中的用户名:

public void setUsername(String username) {
    editor.putString(TAG_USERNAME,username);
    editor.commit();
}

public String getUsername() {
    return preferences.getString(TAG_USERNAME,"null");
}

希望对你有帮助。

【讨论】:

  • 我同意他应该使用共享偏好。但是,您永远不应该在共享首选项中输入纯文本密码。
  • 为什么我需要把密码放在 sharedpreference 中?我只想要用户名
  • @user3431791 这只是一个参数。您可以根据自己的使用情况设置任何值。
【解决方案2】:

你可以使用SharedPreferences

SharedPreferences 类提供了一个通用框架,允许您保存和检索原始数据类型的持久键值对。您可以使用 SharedPreferences 保存任何原始数据:布尔值、浮点数、整数、长整数和字符串。此数据将在用户会话中持续存在(即使您的应用程序被终止)。

在 SharedPreferences 中存储数据的示例代码

SharedPreferences preferences = getSharedPreferences("myPref", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("USER_NAME","NILESH");
editor.apply();

从 SharedPreferences 检索数据的示例代码

SharedPreferences preferences = getSharedPreferences("myPref", MODE_PRIVATE);
String userName = preferences.getString("USER_NAME", "");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2013-03-24
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多