Android не может открыть файл в папке ресурсов

Мое приложение позволяет пользователю экспортировать свои данные другим пользователям или просто сохранить в качестве резервной копии.
Импорт / экспорт работает FINE

Чтобы дать пользователю пример данных при первой установке моего приложения, я хочу упаковать некоторые данные по умолчанию. Я создал образец данных, протестировал IS WORKING FINE, а затем упаковал его в 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;


    }

и я называю это используя:

loadJsonData(Uri.parse("file:///android_asset/giveaway_export.json"), sampleUser);

2 ответа

file:///android_asset работает на WebView и почти ничего другого. использование AssetManager работать с активами - вы получите один из них, позвонив getAssets() на Context, например, ваш Activity,

Используйте AssetManager это пример:

 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;

    }

Помните, что если вы используете Android 6.0+, вам нужно объявить разрешение:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

и требовать разрешения вручную:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
    //Verify permission for Android 6.0+
     checkExternalStoragePermission();
}

используйте этот метод:

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!");
    }
}
Другие вопросы по тегам