开发者

Converting arraylist to array

I have to convert arraylist to array for this thread . Its sending null , so i am wondering about that there is something not right with conversion , although i have give a direct url but still its coming with empty value . The approach i have used is this

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);



        ArrayList<String> listItems = new ArrayList<String>();
        try {
            URL twitter = new URL(
                    "http://midsweden.gofreeserve.com/proj/androidjson.php?identifier=123");
            URLConnection tc = twitter.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    tc.getInputStream()));

            String line;
            while ((line = in.readLine()) != null) {
                JSONArray ja = new JSONArray(line);

                for (int i = 0; i < ja.length(); i++) {
                    JSONObject jo = (JSONObject) ja.get(i);
                    listItems.add(jo.getString("http://midsweden.gofreeserve.com/proj/admin/pictures/file87619.JPG"));
                }
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace(); 
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }

        mStrings = listItems.toArray(new String[listItems.size()]);
         list=(ListView)findViewById(R.id.list);

        adapter=new LazyAdapter(this, mStrings);
         list.setAdapter(adapter);

         Button b=(Button)findViewById(R.id.button1);
         b.setOnClickListener(listener);
        } 

Thanks .

Logcat
07-09 18:06:34.104: DEBUG/dalvikvm(55): GC freed 2 objects / 56 bytes in 403ms
07-09 18:06:34.594: DEBUG/dalvikvm(82): GC freed 7261 objects / 396352 bytes in 608ms
07-09 18:06:34.644: INFO/UsageStats(82): Unexpected resume of com.droidnova.android.howto.optionmenu while already resumed in com.htc.launcher
07-09 18:06:34.745: WARN/dalvikvm(82): disableGcForExternalAlloc: false
07-09 18:06:35.264: WARN/ActivityManager(82): Activity pause timeout for HistoryRecord{44b7d888 com.droidnova.android.howto.optionmenu/.Test}
07-09 18:06:35.274: DEBUG/ImagesWidgetProvider(15615): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:06:35.304: DEBUG/ImagesWidgetProvider(15615): onUpdate(): 
07-09 18:06:35.794: INFO/global(15618): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
07-09 18:06:35.805: WARN/System.err(15618): org.json.JSONException: A JSONArray text must start with '[' at character 0 of 
07-09 18:06:35.925: WARN/System.err(15618):     at org.json.JSONTokener.syntaxError(JSONTokener.java:448)
07-09 18:06:35.935: WARN/System.err(15618):     at org.json.JSONArray.<init>(JSONArray.java:104)
07-09 18:06:35.935: WARN/System.err(15618):     at org.json.JSONArray.<init>(JSONArray.java:150)
07-09 18:06:35.935: WARN/System.err(15618):     at com.droidnova.android.howto.optionmenu.Test.onCreate(Test.java:45)
07-09 18:06:35.944: WARN/System.err(15618):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-09 18:06:35.944: WARN/System.err(15618):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
07-09 18:06:35.944: WARN/System.err(15618):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
07-09 18:06:35.944: WARN/System.err(15618):     at android.app.ActivityThread.access$2200(ActivityThread.java:126)
07-09 18:06:35.944: WARN/System.err(15618):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
07-09 18:06:35.954: WARN/System.err(15618):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 18:06:35.954: WARN/System.err(15618):     at android.os.Looper.loop(Looper.java:123)
07-09 18:06:35.954: WARN/System.err(15618):     at android.app.ActivityThread.main(ActivityThread.java:4595)
07-09 18:06:35.954: WARN/System.err(15618):     at java.lang.reflect.Method.invokeNative(Native Method)
07-09 18:06:35.954: WARN/System.err(15618):     at java.lang.reflect.Method.invoke(Method.java:521)
07-09 18:06:35.954: WARN/System.err(15618):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-09 18:06:35.954: WARN/System.err(15618):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-09 18:06:35.964: WARN/System.err(15618):     at dalvik.system.NativeStart.main(Native Method)
07-09 18:06:35.964: DEBUG/ArrayList(15618): List: []
07-09 18:06:37.164: INFO/ActivityManager(82): Start proc com.svox.pico for broadcast com.svox.pico/.VoiceDataInstallerReceiver: pid=15628 uid=10009 gids={}
07-09 18:06:37.594: INFO/dalvikvm(15628): Debugger thread not active, ignoring DDM send (t=0x41504e4d l=38)
07-09 18:06:37.674: INFO/dalvikvm(15628): Debugger thread not active, ignoring DDM send (t=0x41504e4d l=30)
07-09 18:06:37.754: INFO/ActivityManager(82): Displayed activity com.droidnova.android.howto.optionmenu/.Test: 6140 ms (total 6140 ms)
07-09 18:06:37.884: DEBUG/HtcWidgetScanner(371): action - android.intent.action.PACKAGE_ADDED
07-09 18:06:37.884: DEBUG/HtcWidgetScanner(371): packageUid - 10078
07-09 18:06:38.244: DEBUG/PackageInstallationReceiver(234): Removing.../data/local/tmp/com.droidnova.android.howto.optionmenu.apk
07-09 18:06:38.524: DEBUG/vending(553): [211] LocalAssetCache.updateOnePackage(): No local info for com.droidnova.android.howto.optionmenu
07-09 18:06:38.924: ERROR/PackageInstallationReceiver(234): Remove /data/local/tmp/com.droidnova.android.howto.optionmenu.apk Fail!
07-09 18:06:38.935: WARN/System.err(234): java.io.IOException: Error running exec(). Commands: [/system/xbin/su, 0, /system/bin/rm, /data/local/tmp/com.droidnova.android.howto.optionmenu.apk] Working Directory: null Environment: null
07-09 18:06:38.984: WARN/System.err(234):     at java.lang.ProcessManager.exec(ProcessManager.java:196)
07-09 18:06:38.984: WARN/System.err(234):     at java.lang.Runtime.exec(Runtime.java:225)
07-09 18:06:38.994: WARN/System.err(234):     at java.lang.Runtime.exec(Runtime.java:313)
07-09 18:06:39.004: WARN/System.err(234):     at java.lang.Runtime.exec(Runtime.java:246)
07-09 18:06:39.004: WARN/System.err(234):     at com.htc.android.psclient.PackageInstallationReceiver.removeTempPackageFile(PackageInstallationReceiver.java:34)
07-09 18:06:39.015: WARN/System.err(234):     at com.htc.android.psclient.PackageInstallationReceiver.access$000(PackageInstallationReceiver.java:8)
07-09 18:06:39.025: WARN/System.err(234):     at com.htc.android.psclient.PackageInstallationReceiver$1.run(PackageInstallationReceiver.java:24)
07-09 18:06:39.025: WARN/System.err(234): Caused by: java.io.IOException: No such file or directory
07-09 18:06:39.044: WARN/System.err(234):     at java.lang.ProcessManager.exec(Native Method)
07-09 18:06:39.054: WARN/System.err(234):     at java.lang.ProcessManager.exec(ProcessManager.java:194)
07-09 18:06:39.054: WARN/System.err(234):     ... 6 more
07-09 18:06:39.074: INFO/ActivityManager(82): Start proc com.google.android.apps.maps:FriendService for broadcast com.google.android.apps.maps/com.google.googlenav.friend.android.ServiceReceiver: pid=15637 uid=10033 gids={3003, 1015}
07-09 18:06:39.465: INFO/dalvikvm(15637): Debugger thread not active, ignoring DDM send (t=0x41504e4d l=38)
07-09 18:06:39.515: INFO/dalvikvm(15637): Debugger thread not active, ignoring DDM send (t=0x41504e4d l=88)
07-09 18:06:41.274: DEBUG/dalvikvm(15637): GC freed 1881 objects / 141632 bytes in 184ms
07-09 18:06:41.524: DEBUG/LocationManager(15637): Constructor: service = android.location.ILocationManager$Stub$Proxy@448bffb0
07-09 18:06:41.615: DEBUG/NetworkLocationProvider(82): setMinTime: 540000
07-09 18:06:41.824: DEBUG/WifiService(82): acquireWifiLockLocked: WifiLock{NetworkLocationProvider type=2 binder=android.os.Binder@44d4ea68}
07-09 18:06:41.824: DEBUG/WifiService(82): enable and start wifi due to updateWifiState
07-09 18:06:41.894: INFO/ActivityManager(82): Process com.mamlambo.imageswidget (pid 15615) has died.
07-09 18:06:41.934: INFO/UsageStats(82): Something wrong here, didn't expect com.droidnova.android.howto.optionmenu to be paused
07-09 18:06:41.984: WARN/dalvikvm(82): disableGcForExternalAlloc: false
07-09 18:06:42.115: DEBUG/NetworkLocationProvider(82): onCellLocationChanged [1413,68270998]
07-09 18:06:42.594: INFO/ActivityManager(82): Start proc com.mamlambo.imageswidget for broadcast com.mamlambo.imageswidget/.ImagesWidgetProvider: pid=15643 uid=10093 gids={1015}
07-09 18:06:42.625: INFO/ActivityManager(82): Process com.svox.pico (pid 15628) has died.
07-09 18:06:42.814: DEBUG/ddm-heap(15643): Got feature list request
07-09 18:06:42.985: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:06:42.985: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:06:43.044: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:06:43.055: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:06:43.104: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:06:43.104: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:06:43.154: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:06:43.154: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:06:46.784: DEBUG/WifiService(82): releaseWifiLockLocked: WifiLock{NetworkLocationProvider type=2 binder=android.os.Binder@44d4ea68}
07-09 18:06:46.784: DEBUG/WifiService(82): enable and start wifi due to updateWifiState
07-09 18:06:47.425: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:06:47.425: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:06:52.425: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:06:52.425: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:06:57.465: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:06:57.484: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:07:02.424: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:07:02.424: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:07:07.424: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:07:07.424: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:07:12.464: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:07:12.485: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:07:17.495: VERBOSE/com.mickeyc.batmon.Batreceiver(580): onReceive called - com.mickeyc.batmon.RECORD
07-09 18:07:17.544: DEBUG/ImagesWidgetProvider(15643): OnReceive:Action: android.appwidget.action.APPWIDGET_UPDATE
07-09 18:07:17.544: DEBUG/ImagesWidgetProvider(15643): onUpdate(): 
07-09 18:07:17.594: VERBOSE/com.mickeyc.batmon.Batreceiver(580): Recordin开发者_如何学编程g data (100)
07-09 18:07:17.614: VERBOSE/Batreceiver(580): setLevel(100,100)


Right i've got this working in a little test application i made with a plain page with one imageview, so you may need to tweak it for your list views but the logic is all there.

public class TestActivity extends Activity {

private String[] mStrings;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ArrayList<String> listItems = new ArrayList<String>();
    try {
        URL twitter = new URL(
                "http://midsweden.gofreeserve.com/proj/androidjson.php?identifier=123");
        URLConnection tc = twitter.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                tc.getInputStream()));

        String line = new String();
        while (in.readLine() != null) {
            line = in.readLine();
        }

        //Your string can now be parsed to a JSONobject which contains the array
        JSONObject json = new JSONObject(line);
        Log.d("JSON","Object: "+json);

        //Now we extract the JSONArray from our object
        JSONArray data = json.getJSONArray("services");
        Log.d("JSON","data: "+data);

        //Now to extract an object from the array you call:
        for (int i = 0; i < data.length(); i++){
            JSONObject jo = data.getJSONObject(i);
            Log.d("JSON","jo: "+jo);

            //From each object extract the picture file name
            String picPath = jo.getString("employeepic");
            Log.d("JSON","picPath: "+picPath);

            //Add to list
            listItems.add(picPath);
        }

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace(); 
    }

    //Convert ArralyList to array
    mStrings = listItems.toArray(new String[listItems.size()]);

    //Just to test image download
    ImageView iv = (ImageView) findViewById(R.id.imageView1);
    Bitmap b = getUserPic(mStrings[0]);
    iv.setImageBitmap(b);
}

/**
 * Function loads the pic from url
 * 
 * @param userID
 */
public Bitmap getUserPic(String picID) {
    String imageURL;
    Bitmap bitmap = null;
    Log.d("BITMAP", "Loading Picture");
    imageURL = "http://midsweden.gofreeserve.com/proj/admin/"+picID;
    try {
        bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageURL).getContent());
    } catch (Exception e) {
        Log.d("BITMAP", "Loading Picture FAILED");
        e.printStackTrace();
    }
    return bitmap;
}
}


I took a look at the json being served back from http://midsweden.gofreeserve.com/proj/androidjson.php?identifier=123 and it looks like it is returning you an object at the top-level, not an array.

Seems like you should be reading the entire contents of that response into a JSONObject and then pulling off the JSONArray with the key "services".


It is easier than you think

mStrings = listItems.toArray();

as the documentation for that says

Returns a new array containing all elements contained in this ArrayList.


ArrayList<MyClass> myclassArrList = getArrlist();   ///get the arraylist<class> initialized.
MyClass wCompanyData[];
wCompanyData = myclassArrList.toArray(new MyClass[myclassArrList.size()]);


private ArrayList<String> results = new ArrayList<String>();
String[] gymArr = new String[results.size()];
gymArr = results.toArray(gymArr);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜