- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨, friend ,我正在尝试制作游戏,我需要创建游戏的演示版本
我需要一个按钮,当用户点击它时游戏运行但只有 3 次。
用户点击按钮 3 次后,应用会显示消息“你应该购买游戏”
我使用了 sharedpreferences 。 3 单击按钮后游戏显示消息,但是当用户删除应用程序并再次安装时,游戏不显示消息并运行游戏。
删除应用程序后是否有任何方法可以保存共享首选项?这是我的代码:
Button frist = ((Button)findViewById(R.id.test)); final SharedPreferences check = getSharedPreferences("check",MODE_PRIVATE); final Editor edit = check.edit(); frist.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(check.getInt("check1",0)<3){
Intent intent = new Intent(MainActivity.this,choose_name.class
);
startActivity(intent);
edit.putInt("check1", check.getInt("check1",0)+1).commit();
}
}
});
编辑: friend 我正在尝试写入一个文件并将我的设置保存到其中,我可以将我的文件保存在用户看不到的任何目录中并且我的文件在用户删除应用程序后不会删除并且我不需要使用权限吗?
最佳答案
尝试 Backing up and restoring a user’s SharedPreferences 。这会将您的偏好备份到任何外部存储。
在用户卸载应用程序之前,您可以对其进行备份。添加一些逻辑,如果文件存在于 External Storage 中,则将其恢复。
编辑
使用以下代码支持您的偏好。
Preferences stored in the SharedPreferences class get saved into /data/data//shared_prefs/_preferences.xml - backing up is easy, you just need to copy the contents of this file to external storage:
public static void backupUserPrefs(Context context) {
final File prefsFile = new File(context.getFilesDir(), "../shared_prefs/" + context.getPackageName() + "_preferences.xml");
final File backupFile = new File(context.getExternalFilesDir(null),
"preferenceBackup.xml");
String error = "";
try {
FileChannel src = new FileInputStream(prefsFile).getChannel();
FileChannel dst = new FileOutputStream(backupFile).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
Toast toast = Toast.makeText(context, "Backed up user prefs to " + backupFile.getAbsolutePath(), Toast.LENGTH_SHORT);
toast.show();
return;
} catch (FileNotFoundException e) {
error = e.getMessage();
e.printStackTrace();
} catch (IOException e) {
error = e.getMessage();
e.printStackTrace();
}
使用以下代码恢复偏好
But restoring provides more of a challenge, since the shared_prefs file isn’t directly writable by the app, and the SharedPrefs class doesn’t directly expose its functionality to serialise from xml. Instead you have to parse the XML yourself and push the values back in. Thankfully the XML file has a straightforward structure, so it’s easy to loop over the elements and turn these back into preferences.
public static boolean restoreUserPrefs(Context context) {
final File backupFile = new File(context.getExternalFilesDir(null),
"preferenceBackup.xml");
String error = "";
try {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = sharedPreferences.edit();
InputStream inputStream = new FileInputStream(backupFile);
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(inputStream);
Element root = doc.getDocumentElement();
Node child = root.getFirstChild();
while (child != null) {
if (child.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) child;
String type = element.getNodeName();
String name = element.getAttribute("name");
// In my app, all prefs seem to get serialized as either "string" or
// "boolean" - this will need expanding if yours uses any other types!
if (type.equals("string")) {
String value = element.getTextContent();
editor.putString(name, value);
} else if (type.equals("boolean")) {
String value = element.getAttribute("value");
editor.putBoolean(name, value.equals("true"));
}
}
child = child.getNextSibling();
}
editor.commit();
Toast toast = Toast.makeText(context, "Restored user prefs from " + backupFile.getAbsolutePath(), Toast.LENGTH_SHORT);
toast.show();
return true;
} catch (FileNotFoundException e) {
error = e.getMessage();
e.printStackTrace();
} catch (ParserConfigurationException e) {
error = e.getMessage();
e.printStackTrace();
} catch (SAXException e) {
error = e.getMessage();
e.printStackTrace();
} catch (IOException e) {
error = e.getMessage();
e.printStackTrace();
}
Toast toast = Toast.makeText(context, "Failed to restore user prefs from " + backupFile.getAbsolutePath() + " - " + error, Toast.LENGTH_SHORT);
toast.show();
return false;
}
Toast toast = Toast.makeText(context, "Failed to Back up user prefs to " + backupFile.getAbsolutePath() + " - " + error, Toast.LENGTH_SHORT);
toast.show();
}
Finally, you need to restart your app before these preferences will take hold:
if (restoreUserPrefs(context)) {
// Restart
AlarmManager alm = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
alm.set(AlarmManager.RTC,
System.currentTimeMillis() + 1000, PendingIntent.getActivity(context, 0,
new Intent(context, MainActivityName.class), 0));
android.os.Process.sendSignal(android.os.Process.myPid(),
android.os.Process.SIGNAL_KILL);
}
关于android - 删除并安装应用程序后取回共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25054480/
如何处理在 EditText 上键入时按返回键的事件?当显示虚拟键盘并且用户按回时,它会被隐藏。我想处理这个事件,但是在 EditText 中设置 OnKeyListener 并没有帮助。 最佳答案
我编写了 SMS 应用程序,并为其编写了 BroadcastReceiver。我想从 BroadcastReceiver 获取数据到我的 Activity 中,那么我该如何获取呢。 我的广播接收器代码
有一个场景,其中 httpentity 在 InputStream 中有图像的二进制数据,为了进一步处理,它被转换为库文件中的字符串 [String str = EntityUtils.toStrin
如何获取 uiwebview 的返回和转发 URL。我想要 URL,以便我可以相应地启用和禁用我的网络浏览器上的后退和前进按钮 谢谢 最佳答案 UIWebView 包含后退或前进的构建方法 只需使用执
CGRect rect = Temp_3_Artwork_Big_Image.frame; NSLog(@"Rect : %.2f,%.2f,%.2f,%.2f",rect.origin.x,rect
在返回旧项目并更新其依赖项后,我必须意识到,自版本 1.1.5 以来,logback 不再将 MDC 传播给子项:https://github.com/qos-ch/logback/commit/aa
holder.js 我想向我的页面动态添加占位符图像。 这样插入是行不通的: $('',{class:'file-item'}) .append($('',{'data-src':'holde
我在 C# 中使用 ExecuteOracleNonQuery 来使用存储过程将记录插入到我的 Oracle 数据库中,但似乎无法返回 ROWID。 在 C# 中 ... using (OracleC
我正在努力将一条记录插入到 postgresql 中: val res = DB.withConnection { implicit con => SQL(
我是新手,正在尝试使用 React 和 Redux 构建一个简单的书签应用程序。 我无法解决这个问题: 用户可以创建一个书签并将其添加到多个文件夹。所以我发送一个 addMark(bookmark)
我有一个像下面这样的网址 /pages/edit_product/11 在我的行动 edit_product我怎样才能得到 id 11 这样我就可以做@p = Product.find_by_id(1
我在php中有一个外部文件,输出为json格式 我希望数据以数组的形式发送回 jquery ....该怎么做? php: $options = "data 0 data 1 data 2 data 3
我有以下 C++ 代码: __declspec(dllimport) char* get_mac() { size_t byteToAlloc = 17; char *mac_addr
我正在编写一个 Azure 函数,该函数从 Microsoft 获取 OAuth token ,我已经成功获取了该 token 。我正在尝试使用该 token 访问 Microsoft Graph。我
我有一个 Python Google App Engine 应用程序,我想在 Emacs 中的开发服务器上进行调试。我创建了一个 pdb 可执行文件,以便在 Emacs 中进行调试: $ which
我正在开发一个 google chrome 扩展程序,需要在其中对 Twitch 上的用户进行身份验证。根据https://github.com/justintv/Twitch-API/blob/ma
我有一个简单的 Web API,它返回一个 Iobservable。我正在使用 HttpClient 获取 Observable,以便我可以订阅它。我的问题是订阅时返回的 Iobservable 发出
我正在使用 Ionic 2 构建 Web 应用程序的移动版本,该应用程序使用 SAML 进行 SSO,在我的客户端服务器上运行。现在我们有一个 api,当您未登录网站时会调用它,该网站会重定向到他们的
几个月前,我创建了一个使用 oauth2 与谷歌进行身份验证的 rails 应用程序 - 特别是 omniauth-google-oauth2 gem。我已经完成了创建身份验证和存储刷新 token
我正在尝试将一个值作为 JSON 从我的后端传递到我的应用程序的前端。我目前正在运行 express.js 并且所有发布方法的连接都是完美的。 在我的应用程序的前端单击按钮后,我想从我的服务器取回发票
我是一名优秀的程序员,十分优秀!