我有2个活动,第一个是从用户那里获取图像。第二个活动从谷歌地图获取数据。但是,如果我使用意图从第一个活动调用第二个活动,而又使用另一个意图返回第一个活动,则数据消失了。有什么方法可以保存图像和第二个活动返回的数据?
答案 0 :(得分:2)
有几个可用选项。您现在可能最容易使用的是使用共享的偏好设置:
<nav class="navbar">
<ul class="navbar__ul">
<span class="left">
<li class="navbar__li"> <a href="#"> Coffee </a> </li>
<li class="navbar__li"> <a href="#"> Tea </a> </li>
<li class="navbar__li"> <a href="#"> Menu </a> </li>
<li class="navbar__li"> <a href="#"> Recipes </a> </li>
</span>
<div class="logo__box">
<a href="index.html"> <img class="logo" src="https://upload.wikimedia.org/wikipedia/en/thumb/d/d3/Starbucks_Corporation_Logo_2011.svg/1200px-Starbucks_Corporation_Logo_2011.svg.png"> </a>
</div>
<span class="right">
<li class="navbar__li"> <a href="#"> Blog </a> </li>
<li class="navbar__li"> <a href="#"> Gift Cards </a> </li>
<li class="navbar__li"> <a href="#"> Reviews </a> </li>
<span class="log__sign">
<li class="navbar__li log__signLi"> <a href="#" class="log__signBtn"> Login </a> </li>
<li class="navbar__li log__signLi"> <a href="#" class="log__signBtn"> Sign Up </a> </li>
</span>
</span>
</ul>
</nav>
这将包含图像的字节数组存储为字符串。然后,在下一个活动中,您可以通过以下方式检索它:
SharedPreferences prefs = this.getSharedPreferences("com.your.app", Context.MODE_PRIVATE);
byte[] image; // populate this byte array with your image
String key = "myimagekey";
String imgString = new String(image, "UTF-8");
prefs.edit().putString(key, imgString).apply();
另一个选择,也许是更多的工作,是配置您的应用程序可以使用的SQLite数据库。然后,您可以简单地将图像作为BLOB插入到某个表中,然后在下一个活动中从同一表中读取。
答案 1 :(得分:0)
您可以将图像或大数据保存到内部存储器(android doc)或将其他较小的数据(例如数组列表,对象)保存到与gson共享的首选项中(有关信息,请参见this tutorial)。
希望这会有所帮助!
答案 2 :(得分:0)
根据情况,有两种方法可以实现您想要的。
最常见的情况(这听起来像您的情况)是使用子Activity来获取用户输入时-例如从列表中选择联系人或在对话框中输入数据。在这种情况下,您应该使用startActivityForResult
来启动子活动。
这提供了使用setResult
将数据发送回主活动的管道。 setResult方法采用一个int结果值和一个Intent,该Intent传递回调用方Activity。
Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
resultIntent.putExtra("some_key", "String data");
setResult(Activity.RESULT_OK, resultIntent);
finish();
要在调用活动中访问返回的数据,请覆盖onActivityResult
。 requestCode对应于startActivityForResult
调用中传入的整数,而resultCode和数据Intent是从子Activity返回的。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (MY_CHILD_ACTIVITY) : {
if (resultCode == Activity.RESULT_OK) {
// TODO Extract the data returned from the child Activity.
String returnValue = data.getStringExtra("some_key");
}
break;
}
}
}