繁体   English   中英

Android在Activity类之间传递数据

[英]Android pass data from Activity class to class

我想将字符串数据从我的Activity类传递给一个TCPClient类。 因此,基本上,此字符串包含用户从我的活动类视图输入的IP地址。 然后作为回报,我需要将IP地址传递给TCPClient类。

以下是我正在处理的代码。

MainActivity.class:

 String add1 = etIPAddress1.getText().toString();
                    String add2 = etIPAddress2.getText().toString();
                    String add3 = etIPAddress3.getText().toString();
                    String add4 = etIPAddress4.getText().toString();
                    String new_IPAddress = add1 + "." + add2 + "." + add3 + "." + add4; 

                    Log.d("E", new_IPAddress);

TCPClient.class:

public class TCPClient {

private String serverMessage;

//public static final String SERVERIP = "192.168.254.105"; //your computer IP address
public static final String SERVERIP = "";

public static final int SERVERPORT = 4444;
private OnMessageReceived mMessageListener = null;
private boolean mRun = false;

PrintWriter out;
BufferedReader in;

/**
 *  Constructor of the class. OnMessagedReceived listens for the messages received from server
 */
public TCPClient(OnMessageReceived listener) {
    mMessageListener = listener;
}

这里有人知道怎么做吗? 非常感谢您的帮助。 谢谢。

创建一个以IP地址为参数的构造函数。

public class TCPClient {

    private String SERVERIP = "";

    public TCPClient(String serverIp){

        SERVERIP = serverIp;

    }

}

然后在您的活动中。

TCPClient client = new TCPClient(new_IPAddress);

但是,错误的命名约定使我大失所望;)这是固定的:

public class TcpClient {

    private String serverIp = "";

    public TcpClient(String serverIp){

        this.serverIp = serverIp;

    }

}


...

TcpClient client = new TcpClient(newIpAddress);

您可以通过两种方式实现这一目标。
由于您尚未在MainActivity中声明TCPClient对象/引用。 以下两种方法可以帮助您实现这一目标。 它们如下:

1)。 内部阶层

作为内部类的TCPClient甚至可以访问MainActivity私有变量。

`public class MainActivity  { onCreate().... /* And other activity methods */ public class TCPClient { /* You class implementation here */} }`

2)。 具有ip参数的构造函数的其他类。

TCPClient构造函数中传递参数

public class TCPClient { public TCPClient(Parameters ... params ) {} /* Implementation here */}

然后从您的MainActivity TCPClient tcpClient = new TCPClient(parameters ....);

首先,由于SERVERIP中的TCPClient声明为final ,因此无法更改该值。 您可以:

1)删除初始值并创建一个新的构造函数(推荐)

public static final String SERVERIP;

public TCPClient(OnMessageReceived listener, String ipAddress) {
    mMessageListener = listener;
    SERVERIP = ipAddress;
}

然后在MainActivity ,调用TCPClient client = new TCPClient(yourListener, new_IPAddress);

或2)删除final修饰符

public static String SERVERIP = "";

然后在MainActivity ,调用TCPClient.SERVERIP = new_IPAddress;

在MainActivity.java中使用它

Intent myIntent = new Intent(MainActivity.this, TCPClient.class);
myIntent.putExtras("new_IPAddress", new_IPAddress);
startActivity(myIntent);

在TCPClient.java中使用它

Bundle extra = getIntent().getExtras();
if(extra != null) {
String value = extra.getString("new_IPAddress")


  }

之后,请在任意位置使用该字符串。

快乐的编码:)

我假设您至少对Java语言有基本的了解。 为了获得任何有意义的答案,您将需要提供更多详细信息,以了解所遇到的问题/问题。 “如何将数据从一个对象传递到另一个对象”这个简单的问题过于简单和笼统,无法获得任何质量的答案。 尤其是:

实现简单的mutator / setter或通过构造函数传递数据有什么问题?

另外:

  • 您是否在要求如何将数据从活动传递到现有对象引用(引用不在活动范围之内)?

在这种情况下,问题是如何从Activity中获取对现有对象的对象引用。

  • 您是否在要求如何将数据传递到活动中保存的对象引用?

在这种情况下,问题更多是如何在“活动”中管理对象引用,特别是如何在“活动”生命周期中维护对象引用。

将来请提供尽可能详细的信息,以便我们更好地回答您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM