我希望MainActivity
调用SecondActivity
,而SecondActivity
返回字符串列表。
我阅读的每个答案都说明了如何将数据从MainActivity
传递到SecondActivity
。
我创建了一个活动,可以计算内部网络中所有可能的IP并将其保存在列表中。
我想将此列表传递给MainActivity
。
您能建议我一些链接或代码来解决我的问题吗?
我是Android Studio的新手,但我必须这样做。
这是 MainActivity
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean check_conn = false;
check_conn = checkInternetConnection();//check if you are on internet
if (check_conn){
//we have connection
// find the all the possible IPs
Intent intent = new Intent(MainActivity.this, rangeIP_test.class);
startActivity(intent);
}
else {
// do something annoying
Toast.makeText(MainActivity.this,
"We need Internet Connection!", Toast.LENGTH_LONG).show();
}
}
});
用于计算IP的 rangeIP_test 活动
WifiManager my_wifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
String subnet = getSubnetAddress(my_wifi.getDhcpInfo().gateway);
IPs = findIP(subnet);
public List<String> findIP(String subnet){
List<String> all_IPs;// All IPs on network
all_IPs = new ArrayList<>();
for (int i=2; i<255; i++){
String host = subnet + "." + i;
all_IPs.add(host);
}
return all_IPs;
}
答案 0 :(得分:1)
您可以将列表直接传递给意向附加项
类似的东西
Intent intent = getIntent();
intent.putStringArrayListExtra("test", (ArrayList<String>) all_IPs);
在另一项活动中,您可以像下面这样收到它
ArrayList<String> test = getIntent().getStringArrayListExtra("test");
答案 1 :(得分:1)
使用startActivityForResult和onActivityResult可能有效。
通过startActivityForResult()调用rangeIP_test活动 并通过setResult()返回您的列表。完成工作后,别忘了完成()。
答案 2 :(得分:1)
启动活动rangeIP_test
,以得到如下结果(即主机字符串列表):
Intent intent = new Intent(MainActivity.this, rangeIP_test.class);
startActivityForResult(intent,RC_LIST_STRING);
在MainActivity.java
中将RC_LIST_STRING定义为这样的字段:
private static final int RC_LIST_STRING = 10001;
像这样在MainActivity.java
中覆盖onActivityResult():
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == RC_LIST_STRING) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
// get the list of strings here
ArrayList<String> myHosts = (ArrayList<String>) data.getSerializableExtra("myHosts"); // key must be matching
// do operations on the list
}
}
}
在rangeIP_test.java
中,成功获取所有主机并将它们添加到列表后,您可以将列表传递回开始当前活动(此处{{ 1}}):
MainActivity
现在,您已经完成了rangeIP_test
的活动,回到了Intent intent = new Intent();
intent.putExtra("myHosts", (Serializable) IPs);
setResult(RESULT_OK, intent);
finish();
,并且由于您已覆盖rangeIP_test
,因此您将获得那里的主机列表。
请记住,在此示例中,您要将主机列表转换为序列化类型,并将其传递给先前的活动。由于String和ArrayList已经实现了Serializable接口,因此您将不会获得任何MainActivity
error。
但是,在围绕活动传递模型对象时,您需要首先使模型类实现onActivityResult()
接口,然后再按上述步骤进行操作。
更好的方法是将模型类转换为 Parcelable ,然后在活动之间传递数据。有关更多信息,请参阅此link。