2012-02-27 70 views
0

我試圖從xml中獲取圖像和文本...但是我想要這種進度發生在後臺,所以我試圖使用一個線程,我可以將數據導入一些數組,然後我可以設置我的imageView和這個數組的textView。當我運行時,我看到在線程中程序工作正常獲取數據並放入數組...但在setText和setImageBitmap,我看到這些數組爲空?!怎麼會發生?從線程中獲取數據從XML?

我basicly下面這個教程用來從XML獲取數據:http://p-xr.com/android-tutorial-how-to-parseread-xml-data-into-android-listview/

這是我的代碼:

public class mainPage { 

HashMap<Integer, String> desc; 
HashMap<Integer, Bitmap> bitMap; 
ScrollView scroll; 
View app, temp; 
static int j = 0; 
static View first; 
static NodeList nodes; 
static TextView textView, textView1, textView2; 
static ImageView img, image1, image2; 
LinearLayout parent; 
HashMap<Integer, View> others; 
Runnable get; 

public mainPage() { 

    this.app = MainActivity.app; 
    this.scroll = (ScrollView) app.findViewById(R.id.mainPage_scroll); 
    this.parent = new LinearLayout(scroll.getContext()); 

    parent.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
      LayoutParams.FILL_PARENT)); 
    parent.setOrientation(LinearLayout.VERTICAL); 
    scroll.addView(parent); 

    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 

    others = new HashMap<Integer, View>(); 

    // add first item to main page 
    first = inflater.inflate(R.layout.main_page_first_item, null); 
    parent.addView(first); 
    others.put(0, first); 

    for (int i = 2; i < 10; i++) { 
     temp = inflater.inflate(R.layout.main_page_item, null); 
     others.put(i, temp); 
     parent.addView(temp); 
    } 

} 

public void setPage() { 

    // take datas from XML 
    String xml = XMLfunctions.getXML(); 
    Document doc = XMLfunctions.XMLfromString(xml); 

    // which datas need to be taken, by tag 
    nodes = doc.getElementsByTagName("image"); 

    desc = new HashMap<Integer, String>(); 
    bitMap = new HashMap<Integer, Bitmap>(); 

    new Thread(new Runnable() { 
     public void run() { 
      for (j = 0; j < 20; j++) { 
       if (j != 1) { 
        Element e = (Element) nodes.item(j); 
        desc.put(j, XMLfunctions.getValue(e, "description")); 
        Log.d("try", desc.get(j)); 
        Log.d("tryy", 
          XMLfunctions.getValue(e, "description")); 
        bitMap.put(j, XMLfunctions.getContactPhoto(XMLfunctions 
          .getValue(e, "path"))); 
       } 
      } 
     } 
    }).start(); 

    // add the first item to main page 
    textView = (TextView) (others.get(0)).findViewById(R.id.text); 
    img = (ImageView) (others.get(0)).findViewById(R.id.image); 
    Log.d("first", desc.get(0) + desc.get(0)); 
    if (textView != null) 
     textView.setText(desc.get(0)); 
    if (img != null) 
     img.setImageBitmap(bitMap.get(0)); 

    // add the rest of items to main page 
    for (j = 2; j < 10; j++) { 
     if (j % 2 == 0) { 
      textView1 = (TextView) (others.get(j)).findViewById(R.id.text1); 
      image1 = (ImageView) (others.get(j)).findViewById(R.id.image1); 
      Log.d("others", j + ": " + desc.get(j) + desc.get(j)); 
      if (textView1 != null) 
       textView1.setText(desc.get(j)); 
      if (image1 != null) 
       image1.setImageBitmap(bitMap.get(j)); 
     } else { 
      textView2 = (TextView) (others.get(j - 1)) 
        .findViewById(R.id.text2); 
      image2 = (ImageView) (others.get(j - 1)) 
        .findViewById(R.id.image2); 
      Log.d("others", j + ": " + desc.get(j) + desc.get(j)); 
      if (textView2 != null) 
       textView2.setText(desc.get(j)); 

      if (image2 != null) 
       image2.setImageBitmap(bitMap.get(j)); 
     } 
    } 

} 

    } 

終於在mainActivity我使用這些代碼爲達到這一類我」米不知道這是否有必要,但我也給予。

mainPage fillMain = new mainPage(); 
fillMain.setPage(); 

回答

0

的AsyncTask是你想要使用

+0

我也試過,但後來我無法做到這一點,所以我只是嘗試這種方式,但以一種奇怪的方式,它不會變成數組的值...變成空的 – yahya 2012-02-28 06:04:41

+0

@yahya你可以發表一個例子嗎?後臺進程可能會拋出一個錯誤? – 2012-02-28 15:24:09

+0

@BrianMains請檢查我的答案,我張貼我的AsyncTask嘗試... – yahya 2012-02-28 17:31:23