2012-02-27 90 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