Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android studio-如何从一个活动到另一个活动获取文本?_Java_Android_String_Android Activity - Fatal编程技术网

Java android studio-如何从一个活动到另一个活动获取文本?

Java 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

我得到了一个名为login activity的类。它登录用户并将用户带到UserAreaActivity.class。我使用intent从loginactivity到UserAreaActivity获取用户名和用户名

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

我尝试使用intent,但当我登录时,它会直接将我带到消息。跳过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);
        }
    });
}
}
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这只是一个参数。您可以根据自己的使用情况设置任何值。