Java android studio-如何从一个活动到另一个活动获取文本?
我得到了一个名为login activity的类。它登录用户并将用户带到UserAreaActivity.class。我使用intent从loginactivity到UserAreaActivity获取用户名和用户名 但问题是我得到了另一个名为Messages的类。我想将用户名从UserAreaActivity获取到消息 我尝试使用intent,但当我登录时,它会直接将我带到消息。跳过UserAreaActivity.class 如何修复 loginactivity.classJava android studio-如何从一个活动到另一个活动获取文本?,java,android,string,android-activity,Java,Android,String,Android Activity,我得到了一个名为login activity的类。它登录用户并将用户带到UserAreaActivity.class。我使用intent从loginactivity到UserAreaActivity获取用户名和用户名 但问题是我得到了另一个名为Messages的类。我想将用户名从UserAreaActivity获取到消息 我尝试使用intent,但当我登录时,它会直接将我带到消息。跳过UserAreaActivity.class 如何修复 loginactivity.class public c
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);
}
});
}
}
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);
}
});
}
}
公共类消息扩展了AppCompative活动{
私人按钮添加房间;
私人编辑室名称;
私有列表视图列表视图;
专用阵列适配器阵列适配器;
private ArrayList list_of_rooms=新建ArrayList();
私有字符串名称;
private DatabaseReference root=FirebaseDatabase.getInstance().getReference().getRoot();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_消息);
添加房间=(按钮)findViewById(R.id.btn\u添加房间);
房间名称=(EditText)findViewById(R.id.room\u name\u EditText);
listView=(listView)findViewById(R.id.listView);
arrayAdapter=新的arrayAdapter(这是android.R.layout.simple\u list\u item\u 1,list\u of\u rooms);
setAdapter(arrayAdapter);
添加_room.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Map Map=newhashmap();
map.put(room_name.getText().toString(),“”);
root.updateChildren(map);
}
});
root.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
Set=newhashset();
迭代器i=dataSnapshot.getChildren().Iterator();
while(i.hasNext()){
set.add(((DataSnapshot)i.next()).getKey());
}
列出所有房间。清除();
房间列表。添加所有(套);
arrayAdapter.notifyDataSetChanged();
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
Intent Intent=新的Intent(getApplicationContext(),Chat_Room.class);
intent.putExtra(“房间名称”((TextView)视图).getText().toString());
intent.putExtra(“用户名”,“此处”);
星触觉(意向);
}
});
}
}
要解决此问题,您必须通过使用以下代码片段实现共享引用
:
SharedPreferences preferences;
SharedPreferences.Editor editor;
private String TAG_USERNAME = "username";
在SharedReferences
中设置用户名:
public void setUsername(String username) {
editor.putString(TAG_USERNAME,username);
editor.commit();
}
public String getUsername() {
return preferences.getString(TAG_USERNAME,"null");
}
希望有帮助。您可以使用
SharedReferences类提供了一个通用框架,允许您保存和检索基本数据类型的持久键值对。您可以使用SharedReferences保存任何基本数据:布尔值、浮点值、整数、长数和字符串。此数据将在用户会话中保持不变(即使您的应用程序被终止)
在SharedReferences中存储数据的示例代码
SharedPreferences preferences = getSharedPreferences("myPref", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("USER_NAME","NILESH");
editor.apply();
SharedPreferences preferences = getSharedPreferences("myPref", MODE_PRIVATE);
String userName = preferences.getString("USER_NAME", "");
从SharedReferences检索数据的示例代码
SharedPreferences preferences = getSharedPreferences("myPref", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("USER_NAME","NILESH");
editor.apply();
SharedPreferences preferences = getSharedPreferences("myPref", MODE_PRIVATE);
String userName = preferences.getString("USER_NAME", "");
使用共享优先权哦。这与意图类似吗?您可以使用Handler对象延迟调用,以便UserAreaActivity在您指定的时间内可见。我不知道为什么人们会告诉您使用首选项,因为您已声明问题是跳过了活动。据我所见,消息活动的唯一入口点在UserAreaActivity单击事件中。你在onResume()中做了其他事情吗?没有。我在UserAreaActivity中使用了此代码。Intent in=newintent(getApplicationContext(),Messages.class);in.putExtra(“用户名”,username);UserAreaActivity.this.startActivity(in);我同意他应该使用共享首选项。但是,您永远不应该在共享首选项中放置纯文本密码。为什么我需要在SharedReference中放置密码?我只想要username@user3431791这只是一个参数。您可以根据自己的使用情况设置任何值。