2011-07-09 172 views
1

我必須將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) 
+0

你檢查你的數組列表中包含的數據,你希望你的努力將它轉化成一個陣列之前? – Kenny

+0

在URL有圖像,因此將具有值listItems.add(jo.getString(「http://midsweden.gofreeserve.com/proj/admin/pictures/file87619.JPG」));請指導是否有其他方法檢查 – umar

+1

使用logcat(Log.d)(「ArrayList」,「List:」+ listItems);這將顯示arraylist的內容,所以把它放在try/catch之後。如果說空,那麼你知道數據沒有被投入到你的列表正確 – Kenny

回答

2

對的,我已經有了一個小的測試應用程序,我用一個簡單的網頁製作一個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; 
} 
} 
+0

謝謝肯尼讓我給一個嘗試這種 – umar

+0

非常感謝。它終於奏效了,你現在是我的英雄,我會嘗試休息。再一次感謝 – umar

+0

如果你有一些時間,請看看這個線程相關的這個我有一些工作,但得到一些錯誤http://stackoverflow.com/questions/6638701/setting-up-dynamic-listactivity謝謝 – umar

0

它比你想象

mStrings = listItems.toArray(); 

,作爲該文件說

返回包含此ArrayList的所有元素的數組。

+0

不是問題,使用的方法是完全有效的,只是arraylist不包含數據! – Kenny

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