reading and writing to and from xml file on android - android

This is part of my string.xml file on an application that I'm trying to create:
<array name="users">
<item>
<user_name>u1</user_name>
<password>p1</password>
<email>aaa#aaa</email>
</item>
<item>
<user_name>u2</user_name>
<password>p2</password>
<email>bbb#bbb</email>
</item>
<item>
<user_name>u3</user_name>
<password>p3</password>
<email>ccc#ccc</email>
</item>
</array>
I have a problem reading the "users" two-dimensional array into a two-dimensional array on the java file. I've already created a class name "User" for the array. I'm quite stuck here. Can anybody give me a hand? Thanks

strings.xml is not for what you are trying to do here. It is supposed to have all strings that are displayed to the user to provide multi-language support.
If you want to store your app's domain data to XML file, you can create one in the assets folder and read it.

It's ok. I've solved it. Here is my code:
String[] userArray = getResources().getStringArray(R.array.users);
User[] arr = new User[3];
for(int i=0 ; i<userArray.length ; i++)
arr[i] = new User(userArray[i]);
and this is my "User" class constructor:
public User(String str)
{
int num;
str = str.substring(1);
num = str.indexOf(' ');
user_name = str.substring(0,num);
String substr = str.substring(num+1);
num = substr.indexOf(' ');
password = substr.substring(0,num);
email = substr.substring(num+1);
}
In that way I get an array of "User".

Related

Pulling individual strings from string arrays at random

Im trying to pull individual strings from a string array at random, and display it on screen(in android studio). But i cant seem to find a solution anywhere.
Its a simple string array, and i need to pull one at a click of a button. My string array is pretty standard and set up like this:
<string-array name="string_array1">
<item>Sentence 1</item>
<item>Sentence 2</item>
</string-array>
You can user java String array or ArrayList of String in Activity like:
Java String Array Example in Activity :
1)define an Array
String string_array1[]={"Sentence 1","Sentence 2"};
Get value from the array :
Sting zeroIndexValue=string_array1[0];
Sting oneIndexValue=string_array1[1];
2) ArrayList Example:
define ArrayList of String:
ArrayList<String> string_List=new ArrayList<String>();
Add value to List:
string_List.add("Sentence 1");
string_List.add("Sentence 2");
Get value from List:
string_List.get(0);
string_List.get(1);
fetch array from string file
String[] string_array1 = getResources().getStringArray(R.array.string_array1);
Now generate random value and fetch it from array.
Random rand = new Random()
int Low = 0;
int High = string_array1.length-1;
int value = rand.nextInt(High-Low) + Low; //It will generate random number in the given range only.
String printed_value = string_array1[value];

Increment hex value of R.id file element

i have some consecutive elements id declared inside R.java files. Now i need to fill each one by using a for cycle, so i need to increment for each iteration value of id. I've write this:
int current_id = R.id.button00;
for (int i = 0; i < values.length; i++) {
TextView to_fill = (TextView) (getActivity().findViewById(current_id));
to_fill.setText(String.valueOf(values[i]));
current_id++;
}
but in this way current_id doesn't increment correctly.
How can i do?
There is no guarantee that the generated IDs in R will be sequential, or that they will be generated in any particular order.
I recommend putting your IDs in an array resource like so:
<array name="button_id_array">
<item>#id/button00</item>
<item>#id/button01</item>
<item>#id/button02</item>
</array>
Then you can access it in code like so:
int[] ids = getResources().getIntArray(R.array.test);

getResourceEntryName for an array item

I have a string array in strings.xml as detailed below:
<string-array name="spinerArray">
<item name="one">First</item>
<item name="two">Second</item>
<item name="three">Third</item>
<item name="four">Fourth</item>
</string-array>
And I need to retrieve one of the items name not the value (one, two, three, four). So far, I know it's possible to get the name of the array using getResourceEntryName like:
getResources().getResourceEntryName(R.array.spinerArray);
Is there a way to get an item name?
Thanks.
As this is an xml, you will need a xml parser. Then you can get the values of name using
attributes.getValue("name");
Or
name = ((Element) your_node).getAttribute("name"));
using DOM parser (org.w3c.dom)
Another solution:
Resources res = getResources();
TypedArray entriesTypedArray = res.obtainTypedArray(R.array.spinerArray);
ArrayList entriesName = new ArrayList();
TypedValue v1 = new TypedValue();
for (int i1=0; i1<entriesTypedArray.length(); i1++) {
entriesTypedArray.getValue(i1, v1);
String name1 = res.getResourceEntryName(v1.resourceId);
entriesName.add(name1);
}

get list of the strings present in strings.xml file in Android

I want the list of strings present in the strings.xml file.
Does anyone knows how to get it??? One thing I found is it assigns the ids in sequential order inside R.java but how to get the starting id is not clear.
For Example I have 100 Strings in my strings.xml like below and I want to read in at a time not like giving getResources().getString(int id) for individual.
<string name="app_label">Calendar</string>
<string name="what_label">What</string>
<string name="where_label">Where</string>
<string name="when_label">When</string>
<string name="timezone_label">Time zone</string>
<string name="attendees_label">Guests</string>
<string name="today">Today</string>
<string name="tomorrow">Tomorrow</string>
You can declare your strings in res\values\strings.xml file like this.
<string-array name="vehiclescategory_array">
<item>Cars</item>
<item>Bikes</item>
<item>RVs</item>
<item>Trucks</item>
<item>Other Vehicles</item>
</string-array>
In your activity class, you can access them like the following.
String[] categories;
categories=getResources().getStringArray(R.array.vehiclescategory_array);
In the above list, whatever sequence you declare, the same way it is assigned to the array in your activity. Suppose Cars will be assigned to categories[0]. Hope this helps.
Field[] fields = R.string.class.getDeclaredFields(); // or Field[] fields = R.string.class.getFields();
String str = "";
for (int i =0; i < fields.length; i++) {
int resId = getResources().getIdentifier(fields[i].getName(), "string", getPackageName());
str += fields[i].getName() + " = ";
if (resId != 0) {
str += getResources().getString(resId);
}
str += "\n";
}
You will get all codes of strings with its values in "str" variable.
If you want to access all the Strings from the strings.xml file you could use reflection on the R.string class. An example can be found in this answer, you'll just need to replace drawables with strings.
You could declare an integer array with an entry for each string. I did this for an array of colors once, so I imagine it works for strings as well.
res/values/arrays.xml
<integer-array name="app_strings">
<item>#string/app_label</item>
<item>#string/what_label</item>
<item>#string/where_label</item>
<item>#string/when_label</item>
<item>#string/timezone_label</item>
<item>#string/attendees_label</item>
<item>#string/today</item>
<item>#string/tomorrow</item>
</integer-array>
Then in your code, you would loop over the array and use each value as the argument for getString().
int[] stringIds = getResources().getIntArray(R.array.app_strings);
String[] strings = new String[stringIds.length];
for (int i = 0; i < stringIds.length; i++) {
strings[i] = getString(stringIds[i]);
}
The problem is you have to manually update your arrays.xml whenever you modify your string resources, so it's certainly not ideal.
String[] categories = getResources().getStringArray(R.array.stars_array);
List<String> stringList = new ArrayList<>(Arrays.asList(categories));
use this simple one

Randomly select a string from strings.xml in Android

I need to randomly select a string defined within strings.xml file in android.
For example my strings.xml is :
<resources>
<string name="str1">Content comes here1</string>
<string name="str2">Content comes here2</string>
<string name="str3">Content comes here3</string>
</resources>
Can I randomly select one of these strings in my Activity?
Create an array contains all of your resource names you want to select:
String[] strs = new String[] {"str1", "str2", "str3"};
Get a random index:
int randomIndex = new Random().nextInt(3);
Get your random string from resource:
int resId = getResources().getIdentifier(strs[randomIndex ], "string", your_package_name);
String randomString = getString(resId);
The best way is you declare you Strings as an Array, then get it like this:
String[] arrayOfStrings = context.getResources().getStringArray(R.array.your_string_array);
String randomString = arrayOfStrings[new Random().nextInt(arrayOfStrings.length)];
Then you can use it as you like.
You would probable rather make it an array of strings (and then that is easier to select at random one of the array). Else, you can put the ids of your strings in an array and randomly select one of the items in the array.

Categories

Resources