37

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)
Parth Doshi
  • 4,200
  • 15
  • 79
  • 129
  • possible duplicate of [Convert ArrayList containing Strings to an array of Strings in Java?](http://stackoverflow.com/questions/4042434/convert-arraylist-containing-strings-to-an-array-of-strings-in-java) – Sruit A.Suk Aug 05 '15 at 07:41

7 Answers7

111

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()

DallaRosa
  • 5,737
  • 2
  • 35
  • 53
  • 1
    Same problem here as in Casey's original post: *toArray()* returns an *Object[]* which cannot be cast to *String[]*. Mind to edit your answer? – JimmyB Nov 10 '11 at 17:04
  • 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 – DallaRosa Nov 13 '11 at 12:14
  • 1
    Please add a closing ) in Log.d("string is",(mStringArray[i]); – Moxet Khan May 28 '15 at 15:27
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()]);
Bobby
  • 11,419
  • 5
  • 44
  • 69
Casey
  • 12,070
  • 18
  • 71
  • 107
10
String[] array = new String[items2.size()];
items2.toArray(array);
Casey
  • 12,070
  • 18
  • 71
  • 107
  • if I use this I get something like this in logcat on SOP of array: http://pastie.org/2842530 . Why dont I get "john","ann" in "array"? – Parth Doshi Nov 10 '11 at 16:40
  • 1
    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()*. – JimmyB Nov 10 '11 at 16:57
  • so then how do I implement that ? How can I know the contents of the String "array" ..Is there any other way? – Parth Doshi Nov 10 '11 at 17:21
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()]);
Abdul.Moqueet
  • 902
  • 12
  • 19
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);
Vishnu V S
  • 355
  • 1
  • 10
2

You can try this code

String[] stringA = new String[stringArrayList.size()];
stringArrayList.toArray(stringA)
System.out.println(stringA[0]);
Ishan Fernando
  • 2,758
  • 1
  • 31
  • 38
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.

Michael Banzon
  • 4,879
  • 1
  • 26
  • 28