Android 我如何将一个物体从一个活动带到另一个活动?
我正在尝试更正消息传递应用程序,我有两个独立的活动。我有连接活动和客户端活动。我还为客户提供了一个类。客户端在Connect和client活动中都使用,但我不知道如何将ConnectActivity中使用的client对象携带到ClientActivity 我的活动:Android 我如何将一个物体从一个活动带到另一个活动?,android,appcompatactivity,Android,Appcompatactivity,我正在尝试更正消息传递应用程序,我有两个独立的活动。我有连接活动和客户端活动。我还为客户提供了一个类。客户端在Connect和client活动中都使用,但我不知道如何将ConnectActivity中使用的client对象携带到ClientActivity 我的活动: public class ConnectActivity extends AppCompatActivity { private Client client; private EditText txtServe
public class ConnectActivity extends AppCompatActivity {
private Client client;
private EditText txtServerAddress;
private EditText txtPortNumber;
private EditText txtUsername;
private TextView lblErrors;
public ConnectActivity(){}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connect);
final EditText txtServerAddress = (EditText) findViewById(R.id.edit_text_server_address);
this.txtServerAddress = txtServerAddress;
final EditText txtPortNumber = (EditText) findViewById(R.id.edit_text_port_number);
this.txtPortNumber = txtPortNumber;
final EditText txtUsername = (EditText) findViewById(R.id.edit_text_username);
this.txtUsername = txtUsername;
final TextView lblErrors = (TextView) findViewById(R.id.text_view_errors);
this.lblErrors = lblErrors;
Button btnLogIn = (Button) findViewById(R.id.button_log_in);
btnLogIn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
String username = txtUsername.getText().toString().trim();
if(username.length() == 0)
return;
String portNumber = txtPortNumber.getText().toString().trim();
if(portNumber.length() == 0)
return;
String serverAddress = txtServerAddress.getText().toString().trim();
if(serverAddress.length() == 0)
return;
int port;
try
{
port = Integer.parseInt(portNumber);
}
catch(Exception en)
{
return;
}
client = new Client(serverAddress, port, username, new ClientActivity(), ConnectActivity.this);
if(!client.start())
return;
Intent intent = new Intent(ConnectActivity.this, ClientActivity.class);
startActivity(intent);
}
});
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
public void append(String str)
{
lblErrors.setText(str);
}
}
public class ClientActivity extends AppCompatActivity {
// for I/O
private Client client;
private ListView lstMessages;
private EditText txtMessage;
private Button btnSend;
private ArrayList<ChatMessage> messages;
private ArrayAdapter<ChatMessage> messageAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client);
final ListView lstMessages = (ListView) findViewById(R.id.list_messages);
final EditText txtMessage = (EditText) findViewById(R.id.edit_text_message);
final Button btnSend = (Button) findViewById(R.id.button_send);
btnSend.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
String message = txtMessage.getText().toString();
txtMessage.setText("");
client.sendMessage(new ChatMessage(ChatMessage.MESSAGE, message));
}
});
messages = new ArrayList<>();
messageAdapter = new ArrayAdapter<ChatMessage>(ClientActivity.this, R.layout.chat_message, messages);
lstMessages.setAdapter(messageAdapter);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
public void connectionFailed()
{
Intent intent = new Intent(this, ConnectActivity.class);
startActivity(intent);
}
public void display(String msg)
{
messageAdapter.add(new ChatMessage(ChatMessage.ERROR, msg));
}
public void append(String str)
{
messageAdapter.add(new ChatMessage(ChatMessage.MESSAGE, str));
}
}
我的客户活动:
public class ConnectActivity extends AppCompatActivity {
private Client client;
private EditText txtServerAddress;
private EditText txtPortNumber;
private EditText txtUsername;
private TextView lblErrors;
public ConnectActivity(){}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connect);
final EditText txtServerAddress = (EditText) findViewById(R.id.edit_text_server_address);
this.txtServerAddress = txtServerAddress;
final EditText txtPortNumber = (EditText) findViewById(R.id.edit_text_port_number);
this.txtPortNumber = txtPortNumber;
final EditText txtUsername = (EditText) findViewById(R.id.edit_text_username);
this.txtUsername = txtUsername;
final TextView lblErrors = (TextView) findViewById(R.id.text_view_errors);
this.lblErrors = lblErrors;
Button btnLogIn = (Button) findViewById(R.id.button_log_in);
btnLogIn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
String username = txtUsername.getText().toString().trim();
if(username.length() == 0)
return;
String portNumber = txtPortNumber.getText().toString().trim();
if(portNumber.length() == 0)
return;
String serverAddress = txtServerAddress.getText().toString().trim();
if(serverAddress.length() == 0)
return;
int port;
try
{
port = Integer.parseInt(portNumber);
}
catch(Exception en)
{
return;
}
client = new Client(serverAddress, port, username, new ClientActivity(), ConnectActivity.this);
if(!client.start())
return;
Intent intent = new Intent(ConnectActivity.this, ClientActivity.class);
startActivity(intent);
}
});
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
public void append(String str)
{
lblErrors.setText(str);
}
}
public class ClientActivity extends AppCompatActivity {
// for I/O
private Client client;
private ListView lstMessages;
private EditText txtMessage;
private Button btnSend;
private ArrayList<ChatMessage> messages;
private ArrayAdapter<ChatMessage> messageAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client);
final ListView lstMessages = (ListView) findViewById(R.id.list_messages);
final EditText txtMessage = (EditText) findViewById(R.id.edit_text_message);
final Button btnSend = (Button) findViewById(R.id.button_send);
btnSend.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
String message = txtMessage.getText().toString();
txtMessage.setText("");
client.sendMessage(new ChatMessage(ChatMessage.MESSAGE, message));
}
});
messages = new ArrayList<>();
messageAdapter = new ArrayAdapter<ChatMessage>(ClientActivity.this, R.layout.chat_message, messages);
lstMessages.setAdapter(messageAdapter);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
public void connectionFailed()
{
Intent intent = new Intent(this, ConnectActivity.class);
startActivity(intent);
}
public void display(String msg)
{
messageAdapter.add(new ChatMessage(ChatMessage.ERROR, msg));
}
public void append(String str)
{
messageAdapter.add(new ChatMessage(ChatMessage.MESSAGE, str));
}
}
公共类ClientActivity扩展了AppCompative活动{
//用于I/O
私人客户;
私有ListView消息;
私人编辑文本txtMessage;
私人按钮btnSend;
私有数组列表消息;
专用ArrayAdapter消息适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u客户端);
最终ListView lstMessages=(ListView)findViewById(R.id.list_消息);
最终EditText txtMessage=(EditText)findViewById(R.id.edit\u text\u message);
最终按钮btnSend=(按钮)findviewbyd(R.id.Button\u send);
btnSend.setOnClickListener(新视图.OnClickListener()
{
公共void onClick(视图v)
{
String message=txtMessage.getText().toString();
txtMessage.setText(“”);
client.sendMessage(新的ChatMessage(ChatMessage.MESSAGE,MESSAGE));
}
});
messages=newarraylist();
messageAdapter=newarrayadapter(ClientActivity.this,R.layout.chat_message,messages);
lstMessages.setAdapter(messageAdapter);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
}
公共无效连接失败()
{
Intent Intent=新的Intent(这个,ConnectActivity.class);
星触觉(意向);
}
公共无效显示(字符串消息)
{
添加(新的ChatMessage(ChatMessage.ERROR,msg));
}
公共void追加(字符串str)
{
添加(新的ChatMessage(ChatMessage.MESSAGE,str));
}
}
使您的客户端类实现Parcelable,然后使用
Bundle bundle = new Bundle();
bundle.putParcelable("client", client);
intent.putExtra(bundle);
startActivity(intent);
是实现Parcelable的示例代码。使您的客户端类实现Parcelable,然后使用
Bundle bundle = new Bundle();
bundle.putParcelable("client", client);
intent.putExtra(bundle);
startActivity(intent);
是一个实现Parcelable的示例代码。您可以通过在类B中创建类a的实例并传递任何您想要的内容来轻松实现它您可以通过在类B中创建类a的实例并传递任何您想要的内容来轻松实现您可以使用
Parcelable
将对象从一个活动传递到另一个活动
从您的ConnectActivity.java
btnLogInonClick
方法,packetClient
对象:
// Bundle
Bundle bundle = new Bundle();
bundle.putParcelable("CLIENT", client);
// Intent
Intent intent = new Intent(ConnectActivity.this, ClientActivity.class);
intent.putExtras(bundle);
startActivity(intent);
在ClientActivity.java
onCreate()
方法中,获取Client
对象:
// Get data from Intent
Bundle bundle = getIntent().getExtras();
if(bundle != null)
{
Client client = bundle.getParcelable("CLIENT");
}
供参考,确保您的客户机类实现可包裹
希望这会有所帮助~您可以使用Parcelable
将对象从一个活动传递到另一个活动
从您的ConnectActivity.java
btnLogInonClick
方法,packetClient
对象:
// Bundle
Bundle bundle = new Bundle();
bundle.putParcelable("CLIENT", client);
// Intent
Intent intent = new Intent(ConnectActivity.this, ClientActivity.class);
intent.putExtras(bundle);
startActivity(intent);
在ClientActivity.java
onCreate()
方法中,获取Client
对象:
// Get data from Intent
Bundle bundle = getIntent().getExtras();
if(bundle != null)
{
Client client = bundle.getParcelable("CLIENT");
}
供参考,确保您的客户机类实现可包裹
希望这会有所帮助~您有几个在活动之间共享数据的选项:
如果数据应该是永久性的,则将其存储在数据库、平面文件或SharedReferences中。每个活动都直接从永久存储器访问数据
如果数据不应永久存储,请使您的客户机类可打包,并有意将其传递。其他人已经描述了这一点,因此我将不深入讨论更多细节
在活动之间共享数据有几个选项:
如果数据应该是永久性的,则将其存储在数据库、平面文件或SharedReferences中。每个活动都直接从永久存储器访问数据
如果数据不应永久存储,请使您的客户机类可打包,并有意将其传递。其他人已经描述了这一点,因此我将不深入讨论更多细节
由于OP将活动放在客户机类中,因此很难将其打包。我明白了,感谢您指出这一点。为什么在客户端类@Alexander中有活动?因为OP将活动放在客户端类中,所以很难将其打包。我明白了,谢谢你指出这一点。为什么在客户端类@Alexander中有活动?首先,你不应该自己实例化活动类,像在客户端类中那样传递对活动的引用很少是一个好的选择。它可以泄漏上下文,这是非常糟糕的。不要做这些事those@Alexander哈格里夫斯:如果我的答案似乎有用,那么请放弃投票。首先,你不应该自己实例化活动类,传递对活动的引用,就像你在客户端类中所做的那样,很少是一个好的选择。它可以泄漏上下文,这是非常糟糕的。不要做这些事those@Alexander哈格里夫斯:如果我的答案似乎有用,那么请放弃投票。提前感谢:)这在Android编程中不适用于扩展活动的类。@Code学徒它工作得很好,我正在我的项目中使用它,但问题是,你没有java经验。你看过我的个人资料了吗?你对Android有多少经验,不仅仅是Java?我不需要看,因为你的评论很清楚@我非常欢迎你