Android 安卓可以';无法打开资产文件夹中的文件

Android 安卓可以';无法打开资产文件夹中的文件,android,uri,android-assets,android-assetmanager,Android,Uri,Android Assets,Android Assetmanager,“我的应用”允许用户将其数据导出到其他用户或仅保存为备份。 进出口工作正常 为了让用户在第一次安装我的应用程序时有一个示例数据,我想打包一些默认数据。我创建了样本数据,测试正常,然后我将其打包到assets文件夹中,并在用户第一次运行应用程序时加载它 但我得到的文件找不到异常 代码如下: private List<Giveaway> loadJsonData(Uri data, User user) { List<Giveaway> result =

“我的应用”允许用户将其数据导出到其他用户或仅保存为备份。
进出口工作正常

为了让用户在第一次安装我的应用程序时有一个示例数据,我想打包一些默认数据。我创建了样本数据,测试正常,然后我将其打包到
assets
文件夹中,并在用户第一次运行应用程序时加载它

但我得到的文件找不到异常

代码如下:

  private List<Giveaway> loadJsonData(Uri data, User user) {
        List<Giveaway> result = null;
        try {
            InputStream is = this.getContentResolver().openInputStream(data);
            Gson parser = new GsonBuilder().setDateFormat("dd/MM/yy").setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).setLongSerializationPolicy(LongSerializationPolicy.DEFAULT).setLenient().excludeFieldsWithModifiers(Modifier.FINAL, Modifier.STATIC, Modifier.TRANSIENT).create();

            Set<Giveaway> temp = new HashSet<Giveaway>(50);
            temp.addAll((Collection<? extends Giveaway>) parser.fromJson(new InputStreamReader(is), TypeToken.getParameterized(List.class, Giveaway.class).getType()));



            result = new ArrayList<Giveaway>(temp);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            result = new ArrayList<Giveaway>(1);
        }

        return result;


    }
使用以下示例:

 AssetManager assetManager = getAssets();
            InputStream is = null;
            try {
                is = assetManager.open("giveaway_export.json");
            } catch (IOException e) {
                e.printStackTrace();
            }
因此,您必须更改您的方法:

 private List<Giveaway> loadJsonData(Uri data, User user) {
        List<Giveaway> result = null;
        try {
            //InputStream is = this.getContentResolver().openInputStream(data);
            AssetManager assetManager = getAssets();
            InputStream is = null;
            try {
                is = assetManager.open("giveaway_export.json");
            } catch (IOException e) {
                e.printStackTrace();
            }
            Gson parser = new GsonBuilder().setDateFormat("dd/MM/yy").setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).setLongSerializationPolicy(LongSerializationPolicy.DEFAULT).setLenient().excludeFieldsWithModifiers(Modifier.FINAL, Modifier.STATIC, Modifier.TRANSIENT).create();

            Set<Giveaway> temp = new HashSet<Giveaway>(50);
            temp.addAll((Collection<? extends Giveaway>) parser.fromJson(new InputStreamReader(is), TypeToken.getParameterized(List.class, Giveaway.class).getType()));



            result = new ArrayList<Giveaway>(temp);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            result = new ArrayList<Giveaway>(1);
        }

        return result;

    }
使用此方法:

private void checkExternalStoragePermission() {
    int permissionCheck = ContextCompat.checkSelfPermission(
            this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        Log.i("Message", "You require permissions!.");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 225);
    } else {
        Log.i("Message", "you have already permissions!");
    }
}
使用以下示例:

 AssetManager assetManager = getAssets();
            InputStream is = null;
            try {
                is = assetManager.open("giveaway_export.json");
            } catch (IOException e) {
                e.printStackTrace();
            }
因此,您必须更改您的方法:

 private List<Giveaway> loadJsonData(Uri data, User user) {
        List<Giveaway> result = null;
        try {
            //InputStream is = this.getContentResolver().openInputStream(data);
            AssetManager assetManager = getAssets();
            InputStream is = null;
            try {
                is = assetManager.open("giveaway_export.json");
            } catch (IOException e) {
                e.printStackTrace();
            }
            Gson parser = new GsonBuilder().setDateFormat("dd/MM/yy").setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).setLongSerializationPolicy(LongSerializationPolicy.DEFAULT).setLenient().excludeFieldsWithModifiers(Modifier.FINAL, Modifier.STATIC, Modifier.TRANSIENT).create();

            Set<Giveaway> temp = new HashSet<Giveaway>(50);
            temp.addAll((Collection<? extends Giveaway>) parser.fromJson(new InputStreamReader(is), TypeToken.getParameterized(List.class, Giveaway.class).getType()));



            result = new ArrayList<Giveaway>(temp);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            result = new ArrayList<Giveaway>(1);
        }

        return result;

    }
使用此方法:

private void checkExternalStoragePermission() {
    int permissionCheck = ContextCompat.checkSelfPermission(
            this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        Log.i("Message", "You require permissions!.");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 225);
    } else {
        Log.i("Message", "you have already permissions!");
    }
}

file:///android_asset
适用于
WebView
,几乎没有其他功能。使用
AssetManager
处理资产-您可以通过在
上下文中调用
getAssets()
来获取其中一个资产,例如您的
活动

file:///android_asset
适用于
WebView
,几乎没有其他功能。使用
AssetManager
处理资产-您可以通过在
上下文中调用
getAssets()
来获取其中一个资产,例如您的
活动