Philippe Le Point
Philippe Le Point

Reputation: 255

Storing a file as part of android manifest for deployment and then opening it?

Okay I know this should be dead simple but I guess I'm not phrasing my question correctly in my Google & stackoverflow searches.

I have a substantial amount of static data (6 megs) I need to load into my database upon install. Right now I'm fetching a json data file from my web server on first run and populating my database but that can be slow and something could go wrong. I'd prefer to just include the data file in the manifest and then load it on install or first run.

So, where do I put the file, make it so that it ends up on the target device, and then open it?

I've tried putting it in /res/files/ and then doing:

InputStream inputStream = new FileInputStream("/res/files/foo.json");

but of course I'd have been shocked if that had worked.

While I'm at it I should probably use CSV format instead as that would cut down the size but that's another story, I don't seem to have a way to parse it but I do know how to parse JSON data. Sorry I'm a bit new at this. Thanks!

Upvotes: 0

Views: 81

Answers (3)

NoInspiration
NoInspiration

Reputation: 64

You can put your JSON file in the raw folder (res/raw) and load it with this code :

InputStream inputStream = getResources().openRawResource(R.raw.foo);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
    sb.append(line + "\n");
}
inputStream.close();
JSONArray jArray = new JSONArray(sb.toString());

Then you can use your knowledge to parse the JSONArray.

Upvotes: 0

mehmetminanc
mehmetminanc

Reputation: 1379

I would advise you to use SQLite and/or XML. What @Gabriel suggested will most likely work fine, but loading and processing 6MBs may take some time -a time window of 1 to 5 secs to my experience. Since you downloaded from your webserver I believe your data has some form of structure and in your app you won't need all of the data at once.

Here are some guides/tutorials about SQLite in android, keep in mind that XML is also viable and some will probably advocate XML over SQLite in this case.

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html http://www.vogella.com/tutorials/AndroidSQLite/article.html

Upvotes: 0

Gabriel Negut
Gabriel Negut

Reputation: 13960

You could store it either in assets or in res\raw.

How to open it from the assets folder:

InputStream is = getAssets().open("foo.json");

How to open it from the res\raw folder:

getResources().openRawResource(R.raw.foo);

Upvotes: 1

Related Questions