如何将一个对象从一个 activity 搬运到另一个?
How do I carry an object from one activity to another?
我正在尝试调整消息传递应用程序,并且我有两个独立的活动。我有连接 activity 和客户端 activity。我也有一个 class 给客户。 Connect和Client活动中都使用了client,但是不知道如何把ConnectActivity中使用的Client对象携带到ClientActivity中
我的连接活动:
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));
}
}
使您的客户端 class 实现 Parcelable,然后使用
在 Intent 中传递客户端对象
Bundle bundle = new Bundle();
bundle.putParcelable("client", client);
intent.putExtra(bundle);
startActivity(intent);
Here是实现Parcelable的示例代码。
您可以通过在 Class B 中创建 Class A 的实例并传递您想要的任何内容来轻松做到这一点
您可以使用 Parcelable
将对象从一个 Activity
传递给另一个。
来自您的 ConnectActivity.java
btnLogIn onClick
方法,parcel Client
对象:
// 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");
}
仅供参考, 确保您的 Client
class 实施 Parcelable
.
希望对你有所帮助~
您有多种在活动之间共享数据的选项:
如果数据应该是永久性的,请将其存储在数据库、平面文件或 SharedPreferences 中。每个 activity 直接从永久存储访问数据。
如果数据不应永久存储,请让您的客户端 class 可打包并通过 Intent 传递。其他人已经介绍过了,我就不赘述了。
我正在尝试调整消息传递应用程序,并且我有两个独立的活动。我有连接 activity 和客户端 activity。我也有一个 class 给客户。 Connect和Client活动中都使用了client,但是不知道如何把ConnectActivity中使用的Client对象携带到ClientActivity中
我的连接活动:
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));
}
}
使您的客户端 class 实现 Parcelable,然后使用
在 Intent 中传递客户端对象Bundle bundle = new Bundle();
bundle.putParcelable("client", client);
intent.putExtra(bundle);
startActivity(intent);
Here是实现Parcelable的示例代码。
您可以通过在 Class B 中创建 Class A 的实例并传递您想要的任何内容来轻松做到这一点
您可以使用 Parcelable
将对象从一个 Activity
传递给另一个。
来自您的 ConnectActivity.java
btnLogIn onClick
方法,parcel Client
对象:
// 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");
}
仅供参考, 确保您的 Client
class 实施 Parcelable
.
希望对你有所帮助~
您有多种在活动之间共享数据的选项:
如果数据应该是永久性的,请将其存储在数据库、平面文件或 SharedPreferences 中。每个 activity 直接从永久存储访问数据。
如果数据不应永久存储,请让您的客户端 class 可打包并通过 Intent 传递。其他人已经介绍过了,我就不赘述了。