38

I have a ArrayList that contains values in the form [ann,john]. I want to convert this ArrayList into a String array in the form {"ann","john"}.

How should I do this?

My Android code:

     final Button markabsent = (Button) findViewById(R.id.Button02);
      markabsent.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {

            // Perform action on click
             Toast.makeText(display.this,"You have marked the students absent",Toast.LENGTH_SHORT).show();

             SparseBooleanArray checkedabsent = lView.getCheckedItemPositions();



            for (int i = 0; i < arr2.length; i++) 
            {
                if (checkedabsent.get(i)) 
                {
                    items2.add(arr2[i]);
                    System.out.println(items2);

                }
            }

            Log.d("", "items:");
            for (String string : items2)
            {
                Log.d("string is", string);


            }  
          }
      });  

My Logcat:

     11-10 21:44:00.414: INFO/System.out(2316): [ann, john, ann]
     11-10 21:44:00.414: DEBUG/(2316): items:
     11-10 21:44:00.414: DEBUG/string is(2316): ann
     11-10 21:44:00.414: DEBUG/string is(2316): john

I tried doing everything mentioned in the answers but my logcat just doesn't seem to imrove

Here is the one giving exceptions:

          11-10 22:14:20.855: INFO/System.out(3322): [Ljava.lang.String;@44eb6ff0
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411): FATAL EXCEPTION: main
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411): java.lang.ClassCastException: [Ljava.lang.Object;
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411):     at com.example.display$2.onClick(display.java:124)
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411):     at android.view.View.performClick(View.java:2408)
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411):     at android.view.View$PerformClick.run(View.java:8816)
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411):     at android.os.Handler.handleCallback(Handler.java:587)

Here is one more:

          11-10 22:14:20.875: DEBUG/string is(3322): ann
          11-10 22:14:20.875: INFO/System.out(3322): [Ljava.lang.String;@44eb7720
          11-10 22:14:20.875: INFO/System.out(3322): [Ljava.lang.String;@44eb7720
          11-10 22:14:20.885: INFO/System.out(3322): [Ljava.lang.String;@44eb7720
          11-10 22:14:20.895: DEBUG/string is(3322): john
          11-10 22:14:20.895: INFO/System.out(3322): [Ljava.lang.String;@44eb7de8
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411):     at com.example.display$2.onClick(display.java:124)
1

7 Answers 7

112

Use the method "toArray()"

ArrayList<String>  mStringList= new ArrayList<String>();
mStringList.add("ann");
mStringList.add("john");
Object[] mStringArray = mStringList.toArray();

for(int i = 0; i < mStringArray.length ; i++){
    Log.d("string is",(String)mStringArray[i]);
}

or you can do it like this: (mentioned in other answers)

ArrayList<String>  mStringList= new ArrayList<String>();
mStringList.add("ann");
mStringList.add("john");
String[] mStringArray = new String[mStringList.size()];
mStringArray = mStringList.toArray(mStringArray);

for(int i = 0; i < mStringArray.length ; i++){
    Log.d("string is",(String)mStringArray[i]);
}

http://developer.android.com/reference/java/util/ArrayList.html#toArray()

Sign up to request clarification or add additional context in comments.

3 Comments

Same problem here as in Casey's original post: toArray() returns an Object[] which cannot be cast to String[]. Mind to edit your answer?
Sure, just got it fixed and added the second alternative of first creating the Array and then passing it as a parameter to the toArray() method
Please add a closing ) in Log.d("string is",(mStringArray[i]);
35

Well in general:

List<String> names = new ArrayList<String>();
names.add("john");
names.add("ann");

String[] namesArr = new String[names.size()];
for (int i = 0; i < names.size(); i++) {
    namesArr[i] = names.get(i);  
}

Or better yet, using built in:

List<String> names = new ArrayList<String>();
String[] namesArr = names.toArray(new String[names.size()]);

3 Comments

In ur 1st way if I do a println of SOPln(namesArr) .. I get this : pastie.org/2842530
for the second issue, you will need to loop over the array to print the values.
There's no need to use new String[names.size()], new String[0] should work too.
10
String[] array = new String[items2.size()];
items2.toArray(array);

3 Comments

if I use this I get something like this in logcat on SOP of array: pastie.org/2842530 . Why dont I get "john","ann" in "array"?
That's because an array converted to a String will look just like that. If you want to System.out.println() the array's elements you will have to implement this yourself - unlike for ArrayList which already has its own implementation of toString().
so then how do I implement that ? How can I know the contents of the String "array" ..Is there any other way?
6

I know im very late to answer this. But it will help others, I was also stucked on this.

Here is what i did to get it work.

String[] namesArr = (String[]) names.toArray(new String[names.size()]);

Comments

3

You can try this code

String[] stringA = new String[stringArrayList.size()];
stringArrayList.toArray(stringA)
System.out.println(stringA[0]);

Comments

2
try this

List<String> list = new ArrayList<String>();
list.add("List1");
list.add("List2");

String[] listArr = new String[list.size()];
listArr = list.toArray(listArr );

for(String s : listArr )
    System.out.println(s);

Comments

1

You could make an array the same size as the ArrayList and then make an iterated for loop to index the items and insert them into the array.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.