Включить локальный файл .json в проект Eclipse Android

У меня есть локальный файл .json. Я не хочу, чтобы это было на сервере, я просто хочу, чтобы он был включен в мое приложение. Я попытался вставить его непосредственно в Eclipse в моем проекте, но у меня есть FileNotFoundException, я также попытался вставить его в папку рабочей области в Проводнике Windows/Finder и получил то же исключение. Где я должен это поставить?

Спасибо!

Ответы

Ответ 1

Вы должны поместить файл в каталог /assets или /res/raw вашего проекта Android. Оттуда вы можете получить его с помощью: Context.getResources().openRawResource(R.raw.filename) или Context.getResources().getAssets().open("filename").

Ответ 2

Поместите json файл в папку с ресурсами, я использовал этот метод, как этот

public static String jsonToStringFromAssetFolder(String fileName,Context context) throws IOException {
        AssetManager manager = context.getAssets();
        InputStream file = manager.open(fileName);

        byte[] data = new byte[file.available()];
        file.read(data);
        file.close();
        return new String(data);
    }

Во время разбора мы можем использовать метод:

String jsondata= jsonToStringFromAssetFolder(your_filename, your_context);
jsonFileToJavaObjectsParsing(jsondata);  // json data to java objects implementation 

Дополнительная информация: Блог Prativa

Ответ 3

Поместите файл в папку с ресурсами. Вы можете использовать AssetManager open (String fileName) для чтения файла.

Ответ 4

В разделе/​​активы в папке проекта. Если у вас его нет, сделайте это.

Ответ 5

Скопировать ресурс в локальное хранилище

У меня была очень схожая потребность. У меня был файл шаблонов ярлыков, который мне нужен для настройки конфигурации принтера Bluetooth, поэтому я включил его в свой каталог ресурсов и скопировал его во внутреннюю память для дальнейшего использования:

private static final String LABEL_TEMPLATE_FILE_NAME = "RJ_4030_4x3_labels.bin";

InputStream inputStreamOfLabelTemplate = getAssets().open( LABEL_TEMPLATE_ASSET_PATH );

labelTemplateFile = new File( getFilesDir() + LABEL_TEMPLATE_FILE_NAME );

copyInputStreamToFile( inputStreamOfLabelTemplate, labelTemplateFile );

printer.setCustomPaper( labelTemplateFile.getAbsolutePath() );

copyInputStreamToFile Функция

// Copy an InputStream to a File.
//
private void copyInputStreamToFile(InputStream in, File file) {
    try {
        OutputStream out = new FileOutputStream(file);
        byte[] buf = new byte[1024];
        int len;
        while((len=in.read(buf))>0){
            out.write(buf,0,len);
        }
        out.close();
        in.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}