私は画像とテキストをxmlから取得しようとしています...しかし、この進歩がバックグラウンドに起こるように、私はいくつかの配列にデータを渡すことができるスレッドを使用しようとしました。この配列を使ってtextViewを作成します。私が実行すると、私はスレッドでは、プログラムが正常に動作データを取得し、配列に入れて参照してください...しかし、setTextとsetImageBitmapで、私はそれらの配列が空を参照してください!それはどうしたらできますか?スレッドのxmlからデータを取得していますか?
私はbasicly XMLからデータを取得するため、このチュートリアルを以下のよ:http://p-xr.com/android-tutorial-how-to-parseread-xml-data-into-android-listview/
そして、ここでは私のコードです:
mainActivity上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));
}
}
}
}
そして最後に、私は「このクラスに到達するためにこれらのコードを使用していますこれが必要なのかどうかわからないけど、私もやっています。
mainPage fillMain = new mainPage();
fillMain.setPage();
私はそれもやってみましたが、私はそれをやり遂げることができませんでしたので、私はこの方法を試してみましたが、奇妙なことに、配列の値は変わりません... nullになる – yahya
@yahyaあなたはそれの例を投稿できますか?バックグラウンドプロセスでエラーが発生している可能性がありますか? –
@BrianMains私の答えをチェックしてください、私は私のAsyncTaskを投稿しました... – yahya