Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.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
Android 我如何将一个物体从一个活动带到另一个活动?_Android_Appcompatactivity - Fatal编程技术网

Android 我如何将一个物体从一个活动带到另一个活动?

Android 我如何将一个物体从一个活动带到另一个活动?,android,appcompatactivity,Android,Appcompatactivity,我正在尝试更正消息传递应用程序,我有两个独立的活动。我有连接活动和客户端活动。我还为客户提供了一个类。客户端在Connect和client活动中都使用,但我不知道如何将ConnectActivity中使用的client对象携带到ClientActivity 我的活动: public class ConnectActivity extends AppCompatActivity { private Client client; private EditText txtServe

我正在尝试更正消息传递应用程序,我有两个独立的活动。我有连接活动和客户端活动。我还为客户提供了一个类。客户端在Connect和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));
    }

}
我的客户活动:

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
btnLogIn
onClick
方法,packet
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");
}
供参考,确保您的
客户机
类实现
可包裹


希望这会有所帮助~

您可以使用
Parcelable
将对象从一个
活动传递到另一个
活动

从您的
ConnectActivity.java
btnLogIn
onClick
方法,packet
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");
}
供参考,确保您的
客户机
类实现
可包裹


希望这会有所帮助~

您有几个在活动之间共享数据的选项:

  • 如果数据应该是永久性的,则将其存储在数据库、平面文件或SharedReferences中。每个活动都直接从永久存储器访问数据

  • 如果数据不应永久存储,请使您的客户机类可打包,并有意将其传递。其他人已经描述了这一点,因此我将不深入讨论更多细节


  • 在活动之间共享数据有几个选项:

  • 如果数据应该是永久性的,则将其存储在数据库、平面文件或SharedReferences中。每个活动都直接从永久存储器访问数据

  • 如果数据不应永久存储,请使您的客户机类可打包,并有意将其传递。其他人已经描述了这一点,因此我将不深入讨论更多细节



  • 由于OP将活动放在客户机类中,因此很难将其打包。我明白了,感谢您指出这一点。为什么在客户端类@Alexander中有活动?因为OP将活动放在客户端类中,所以很难将其打包。我明白了,谢谢你指出这一点。为什么在客户端类@Alexander中有活动?首先,你不应该自己实例化活动类,像在客户端类中那样传递对活动的引用很少是一个好的选择。它可以泄漏上下文,这是非常糟糕的。不要做这些事those@Alexander哈格里夫斯:如果我的答案似乎有用,那么请放弃投票。首先,你不应该自己实例化活动类,传递对活动的引用,就像你在客户端类中所做的那样,很少是一个好的选择。它可以泄漏上下文,这是非常糟糕的。不要做这些事those@Alexander哈格里夫斯:如果我的答案似乎有用,那么请放弃投票。提前感谢:)这在Android编程中不适用于扩展活动的类。@Code学徒它工作得很好,我正在我的项目中使用它,但问题是,你没有java经验。你看过我的个人资料了吗?你对Android有多少经验,不仅仅是Java?我不需要看,因为你的评论很清楚@我非常欢迎你