将数组列表转换为数组
我必须将arraylist转换为数组线程。它的发送空,所以我想知道有什么不对转换,虽然我给了一个直接的网址,但仍然是它的空值。我用过的方法是这样的将数组列表转换为数组
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);
}
谢谢。
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 = [email protected]
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 [email protected]}
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 [email protected]}
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): Recording data (100)
07-09 18:07:17.614: VERBOSE/Batreceiver(580): setLevel(100,100)
对的,我已经有了一个小的测试应用程序,我用一个简单的网页制作一个ImageView的这方面的工作,所以你可能需要调整它为你的列表视图但逻辑都在那里。
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;
}
}
它比你想象
mStrings = listItems.toArray();
,作为该文件说
返回包含此ArrayList的所有元素的数组。
不是问题,使用的方法是完全有效的,只是arraylist不包含数据! – Kenny
我看了看从http://midsweden.gofreeserve.com/proj/androidjson.php?identifier=123回来的json,它看起来像是在顶层返回一个对象,而不是数组。
好像你应该阅读该响应的全部内容复制到一个JSONObject,然后脱下JSONArray与键“服务”。
哦,是的,可能是问题,让我给一个尝试它,谢谢 – umar
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);
你检查你的数组列表中包含的数据,你希望你的努力将它转化成一个阵列之前? – Kenny
在URL有图像,因此将具有值listItems.add(jo.getString(“http://midsweden.gofreeserve.com/proj/admin/pictures/file87619.JPG”));请指导是否有其他方法检查 – umar
使用logcat(Log.d)(“ArrayList”,“List:”+ listItems);这将显示arraylist的内容,所以把它放在try/catch之后。如果说空,那么你知道数据没有被投入到你的列表正确 – Kenny