Return 列表从 Activity 到 Main Activity?
Return list from a Activity to Main Activity?
我想 MainActivity
调用一个 SecondActivity
和 SecondActivity
return 一个字符串列表。
我读过的每个答案都解释了如何将数据从 MainActivity
传递到 SecondActivity
。
我创建了一个 Activity 来计算内部网络中所有可能的 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();
}
}
});
计算IPsrangeIP_testActivity
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;
}
您可以直接将列表传递给 intent extras
像这样
Intent intent = getIntent();
intent.putStringArrayListExtra("test", (ArrayList<String>) all_IPs);
在另一个activity中,您可以像下面这样接收
ArrayList<String> test = getIntent().getStringArrayListExtra("test");
使用 startActivityForResult 和 onActivityResult 可能有效。
调用 rangeIP_test Activity 开始ActivityForResult()
return 你的列表由 setResult()。作业完成后不要忘记 finish()。
启动 activity、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
中,成功获取所有主机并将它们添加到列表中后,您可以将列表传递回activity(此处为MainActivity
)启动当前的任何一个activity(这里,rangeIP_test
)像这样:
Intent intent = new Intent();
intent.putExtra("myHosts", (Serializable) IPs);
setResult(RESULT_OK, intent);
finish();
现在,您已完成 rangeIP_test
activity,您将返回 MainActivity
,因为您已覆盖 onActivityResult()
,您将获得那边的主机列表。
请记住,在此示例中,您将主机列表转换为序列化类型并将其传递给之前的 activity。自 String and ArrayList already implement Serializable interface, you won't get any unable to marshal value
error。
但是,在围绕活动传递模型对象时,您需要首先使模型 class 实现 Serializable
接口,然后按上述方式进一步处理。
更好的方法是将模型 classes 转换为 Parcelable,然后在活动之间传递数据。请参阅此 link 了解更多信息。
我想 MainActivity
调用一个 SecondActivity
和 SecondActivity
return 一个字符串列表。
我读过的每个答案都解释了如何将数据从 MainActivity
传递到 SecondActivity
。
我创建了一个 Activity 来计算内部网络中所有可能的 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();
}
}
});
计算IPsrangeIP_testActivity
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;
}
您可以直接将列表传递给 intent extras
像这样
Intent intent = getIntent();
intent.putStringArrayListExtra("test", (ArrayList<String>) all_IPs);
在另一个activity中,您可以像下面这样接收
ArrayList<String> test = getIntent().getStringArrayListExtra("test");
使用 startActivityForResult 和 onActivityResult 可能有效。
调用 rangeIP_test Activity 开始ActivityForResult() return 你的列表由 setResult()。作业完成后不要忘记 finish()。
启动 activity、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
中,成功获取所有主机并将它们添加到列表中后,您可以将列表传递回activity(此处为MainActivity
)启动当前的任何一个activity(这里,rangeIP_test
)像这样:
Intent intent = new Intent();
intent.putExtra("myHosts", (Serializable) IPs);
setResult(RESULT_OK, intent);
finish();
现在,您已完成 rangeIP_test
activity,您将返回 MainActivity
,因为您已覆盖 onActivityResult()
,您将获得那边的主机列表。
请记住,在此示例中,您将主机列表转换为序列化类型并将其传递给之前的 activity。自 String and ArrayList already implement Serializable interface, you won't get any unable to marshal value
error。
但是,在围绕活动传递模型对象时,您需要首先使模型 class 实现 Serializable
接口,然后按上述方式进一步处理。
更好的方法是将模型 classes 转换为 Parcelable,然后在活动之间传递数据。请参阅此 link 了解更多信息。