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);
精彩评论