
本地存储分为异步和同步。
设置:
异步:wxsetStorage
同步:wxsetStorageSync
获取:
异步:wxgetStorage
同步:wxgetStorageSync
移除:
异步:wxremoveStorage
同步:wxremoveStorageSync
清除所有:
异步:wxclearStorage
同步:wxclearStorageSync
这里给大家以同步为例,
wxsetStorageSync('key','value')
接下来,我们说一下本地收藏功能怎么实现的呢
这是一个列表渲染页面,每一个view点进去的详情页面其实是一个页面,只是传不同的id,来赋值不同的数据展示出来而已。
通过JS文件中带参数的跳转,把相应的数据传到详情页中,那接下来就是展示详情页
在Android 10及以上版本,由于Google对文件访问权限的限制,你需要使用MediaStore API来访问外部存储。这里给你一个在SD卡中读取并保存的示例。请确保在AndroidManifestxml中添加了存储权限。
在AndroidManifestxml文件中添加以下权限:
<uses-permission android:name="androidpermissionREAD_EXTERNAL_STORAGE" />
<uses-permission android:name="androidpermissionWRITE_EXTERNAL_STORAGE" />
在MainActivityjava中添加以下代码:
import androidManifest;
import androidcontentContentValues;
import androidcontentpmPackageManager;
import androidgraphicsBitmap;
import androidgraphicsBitmapFactory;
import androidnetUri;
import androidosBuild;
import androidosBundle;
import androidproviderMediaStore;
import androidutilLog;
import androidwidgetToast;
import androidxannotationNonNull;
import androidxappcompatappAppCompatActivity;
import androidxcoreappActivityCompat;
import androidxcorecontentContextCompat;
import javaioFileNotFoundException;
import javaioIOException;
import javaioInputStream;
import javaioOutputStream;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final int PERMISSION_REQUEST_CODE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutactivity_main);
if (ContextCompatcheckSelfPermission(this, ManifestpermissionWRITE_EXTERNAL_STORAGE) != PackageManagerPERMISSION_GRANTED) {
ActivityCompatrequestPermissions(this, new String[]{ManifestpermissionWRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
} else {
accessExternalStorage();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResultslength > 0 && grantResults[0] == PackageManagerPERMISSION_GRANTED) {
accessExternalStorage();
} else {
ToastmakeText(this, "Permission Denied!", ToastLENGTH_SHORT)show();
}
}
}
private void accessExternalStorage() {
// Read image from external storage
Uri imageUri = MediaStoreImagesMediaEXTERNAL_CONTENT_URI;
try {
InputStream inputStream = getContentResolver()openInputStream(imageUri);
if (inputStream != null) {
Bitmap bitmap = BitmapFactorydecodeStream(inputStream);
inputStreamclose();
// Save image to external storage
ContentValues contentValues = new ContentValues();
contentValuesput(MediaStoreMediaColumnsDISPLAY_NAME, "my_saved_imagejpg");
contentValuesput(MediaStoreMediaColumnsMIME_TYPE, "image/jpeg");
contentValuesput(MediaStoreMediaColumnsRELATIVE_PATH, "DCIM/MyApp");
Uri newImageUri = getContentResolver()insert(MediaStoreImagesMediaEXTERNAL_CONTENT_URI, contentValues);
if (newImageUri != null) {
OutputStream outputStream = getContentResolver()openOutputStream(newImageUri);
if (outputStream != null) {
bitmapcompress(BitmapCompressFormatJPEG, 100, outputStream);
outputStreamclose();
ToastmakeText(this, "Image saved!", ToastLENGTH_SHORT)show();
}
}
}
} catch (FileNotFoundException e) {
Loge(TAG, "File not found", e);
} catch (IOException e) {
Loge(TAG, "I/O exception", e);
}
}
}
这个示例将会请求存储权限,然后从外部存储读取一张,并将其另存为 "my_saved_imagejpg"。 注意这个示例适用于Android 10及以上版本,对于Android 9及以下版本,你需要使用EnvironmentgetExternalStorageDirectory()来获取外部存储路径。
对于低于Android 10的版本,你可以使用EnvironmentgetExternalStorageDirectory()来访问外部存储,但是请注意,从Android 11开始,这个方法已经被弃用。
在这个示例中,我将展示如何适配不同版本的Android系统,通过检查设备的API级别来决定如何访问外部存储。
首先,在AndroidManifestxml中添加存储权限:
<uses-permission android:name="androidpermissionREAD_EXTERNAL_STORAGE" />
<uses-permission android:name="androidpermissionWRITE_EXTERNAL_STORAGE" />
然后,在MainActivityjava中添加以下代码:
import androidManifest;
import androidcontentpmPackageManager;
import androidosBuild;
import androidosBundle;
import androidosEnvironment;
import androidutilLog;
import androidwidgetToast;
import androidxannotationNonNull;
import androidxappcompatappAppCompatActivity;
import androidxcoreappActivityCompat;
import androidxcorecontentContextCompat;
import javaioFile;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final int PERMISSION_REQUEST_CODE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutactivity_main);
if (ContextCompatcheckSelfPermission(this, ManifestpermissionWRITE_EXTERNAL_STORAGE) != PackageManagerPERMISSION_GRANTED) {
ActivityCompatrequestPermissions(this, new String[]{ManifestpermissionWRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
} else {
accessExternalStorage();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResultslength > 0 && grantResults[0] == PackageManagerPERMISSION_GRANTED) {
accessExternalStorage();
} else {
ToastmakeText(this, "Permission Denied!", ToastLENGTH_SHORT)show();
}
}
}
private void accessExternalStorage() {
File externalStorageDirectory;
if (BuildVERSIONSDK_INT >= BuildVERSION_CODESQ) {
externalStorageDirectory = getExternalFilesDir(EnvironmentDIRECTORY_PICTURES);
} else {
externalStorageDirectory = new File(EnvironmentgetExternalStorageDirectory(), "MyApp");
}
if (externalStorageDirectory != null) {
Logi(TAG, "External storage directory: " + externalStorageDirectorygetAbsolutePath());
File[] files = externalStorageDirectorylistFiles();
if (files != null) {
for (File file : files) {
Logi(TAG, "File: " + filegetName());
}
}
} else {
Loge(TAG, "Unable to access external storage directory");
}
}
}
在这个示例中,我们检查当前设备的API级别。如果设备运行在Android 10及以上版本,我们使用getExternalFilesDir()方法来访问外部存储;否则,我们使用已弃用的EnvironmentgetExternalStorageDirectory()方法。
这段代码将会请求存储权限,然后根据设备的Android版本来访问外部存储并遍历文件夹中的文件。
…………
回复:
在 Android 10 及以上版本中,Google 引入了分区存储,使应用程序在访问外部存储时受到限制。因此,在 Android 10
及以上版本中,我们不能像以前那样直接访问外部存储。如果您想在所有版本中使用相同的代码,可以使用兼容库(AndroidX)中的 Storage
Access Framework (SAF)。
首先,确保您在项目的 buildgradle 文件中添加了以下依赖项
implementation 'androidxdocumentfile:documentfile:101'
然后在 AndroidManifestxml 文件中添加存储权限:
<uses-permission android:name="androidpermissionREAD_EXTERNAL_STORAGE" />
<uses-permission android:name="androidpermissionWRITE_EXTERNAL_STORAGE" />
接下来,我们将使用 SAF 来获取存储目录并遍历其内容:
import androidManifest;
import androidcontentIntent;
import androidcontentpmPackageManager;
import androidnetUri;
import androidosBundle;
import androidproviderDocumentsContract;
import androidutilLog;
import androidwidgetToast;
import androidxannotationNullable;
import androidxappcompatappAppCompatActivity;
import androidxcoreappActivityCompat;
import androidxcorecontentContextCompat;
import androidxdocumentfileproviderDocumentFile;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final int PERMISSION_REQUEST_CODE = 100;
private static final int OPEN_DIRECTORY_REQUEST_CODE = 200;
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutactivity_main);
if (ContextCompatcheckSelfPermission(this,
ManifestpermissionWRITE_EXTERNAL_STORAGE) !=
PackageManagerPERMISSION_GRANTED) {
ActivityCompatrequestPermissions(this, new
String[]{ManifestpermissionWRITE_EXTERNAL_STORAGE},
PERMISSION_REQUEST_CODE);
} else {
openDirectoryPicker();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResultslength > 0 && grantResults[0] == PackageManagerPERMISSION_GRANTED) {
openDirectoryPicker();
} else {
ToastmakeText(this, "Permission Denied!", ToastLENGTH_SHORT)show();
}
}
}
private void openDirectoryPicker() {
Intent intent = new Intent(IntentACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, OPEN_DIRECTORY_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
superonActivityResult(requestCode, resultCode, data);
if (requestCode == OPEN_DIRECTORY_REQUEST_CODE && resultCode == RESULT_OK && data != null) {
Uri directoryUri = datagetData();
if (directoryUri != null) {
getContentResolver()takePersistableUriPermission(directoryUri,
IntentFLAG_GRANT_READ_URI_PERMISSION |
IntentFLAG_GRANT_WRITE_URI_PERMISSION);
DocumentFile directory = DocumentFilefromTreeUri(this, directoryUri);
if (directory != null) {
listFiles(directory);
}
}
}
}
private void listFiles(DocumentFile directory) {
DocumentFile[] files = directorylistFiles();
for (DocumentFile file : files) {
Logi(TAG, "File: " + filegetName());
}
}
}
在这个示例中,我们请求存储权限,然后调用 openDirectoryPicker() 函数打开目录选择器。用户选择一个目录后,我们获取该目录的 Uri,并将其持久访问权限授予我们的应用。然后,我们使用 DocumentFile 类遍历所选目录的内容。
这个示例适用于所有 Android 版本,不需要针对特定版本编写特殊代码。请注意,通过 SAF 访问文件和目录可能比直接访问文件系统慢一些,但这是在 Android 10 及更高版本中访问外部存储的推荐方法。在低于 Android 10 的版本中,直接访问文件系统通常更快。因此,您可以选择针对低于 Android 10 的版本使用 EnvironmentgetExternalStorageDirectory(),对于 Android 10 及更高版本使用 SAF。
传值是最好将字典,数组类型的 转成json字符串比较好
JSONstringify(item)
然后到下一个页面 的mounted()函数中取值
如果在微信中 下面有 <- -> 前进返回 箭头 就要用 name 这种方式push 下一个页面是可以到下一个页面,但是单按右箭头返回时是返回不到先前界面的
因为它记录的是页面路劲,所以如果想要实现可以返回的界面切换最好要用 path 路径来push
//本地存
//用的时候取
还有一个 sessionStorage 缓存传值 和 localStorage的 *** 作类似
WebStorage的目的是克服由cookie所带来的一些限制,当数据需要被严格控制在客户端时,不需要持续的将数据发回服务器。
WebStorage两个主要目标:(1)提供一种在cookie之外存储会话数据的路径。(2)提供一种存储大量可以跨会话存在的数据的机制。
HTML5的WebStorage提供了两种API:localStorage(本地存储)和sessionStorage(会话存储)。
1、生命周期:localStorage:localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失。localStorage除非主动删除数据,否则数据永远不会消失。
sessionStorage的生命周期是在仅在当前会话下有效。sessionStorage引入了一个“浏览器窗口”的概念,sessionStorage是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源另一个页面,数据依然存在。但是sessionStorage在关闭了浏览器窗口后就会被销毁。同时独立的打开同一个窗口同一个页面,sessionStorage也是不一样的。
2、存储大小:localStorage和sessionStorage的存储数据大小一般都是:5MB
3、存储位置:localStorage和sessionStorage都保存在客户端,不与服务器进行交互通信。
4、存储内容类型:localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理
5、获取方式:localStorage:windowlocalStorage;;sessionStorage:windowsessionStorage;。
6、应用场景:localStoragese:常用于长期登录(+判断用户是否已登录),适合长期保存在本地的数据。sessionStorage:敏感账号一次性登录;
WebStorage的优点:
(1)存储空间更大:cookie为4KB,而WebStorage是5MB;
(2)节省网络流量:WebStorage不会传送到服务器,存储在本地的数据可以直接获取,也不会像cookie一样美词请求都会传送到服务器,所以减少了客户端和服务器端的交互,节省了网络流量;
(3)对于那种只需要在用户浏览一组页面期间保存而关闭浏览器后就可以丢弃的数据,sessionStorage会非常方便;
(4)快速显示:有的数据存储在WebStorage上,再加上浏览器本身的缓存。获取数据时可以从本地获取会比从服务器端获取快得多,所以速度更快;
(5)安全性:WebStorage不会随着>
以上就是关于微信小程序--本地存储全部的内容,包括:微信小程序--本地存储、求安卓SD存储读写实例、Vue 页面间传值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)