Android将数据从Activity类传递给class

时间:2014-01-06 04:13:37

标签: java android

我想将我的Activity类中的字符串数据传递给一个TCPClient类的类。所以基本上,这个字符串包含用户从我的Activity类视图输入的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;
}

这里有人知道怎么做吗?我很乐意感谢你的帮助。感谢。

5 个答案:

答案 0 :(得分:2)

创建一个以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);

答案 1 :(得分:2)

您可以通过两种方式实现这一目标。
由于您尚未在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 ....);

答案 2 :(得分:1)

首先,由于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;

答案 3 :(得分:0)

在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")


  }

在此之后使用字符串,无论你想要什么。

快乐编码:)

答案 4 :(得分:0)

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

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

此外:

  • 您是否在询问如何将数据从活动传递到现有活动 对象引用,其中引用超出了Activity的范围?

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

  • 您是否在询问如何将数据传递给您在“活动”中保存的对象引用?

在这种情况下,问题是如何管理活动中的对象引用,特别是通过Activity生命周期维护对象引用。

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