わかりました、最初にシナリオを単純化しましょう
実際には、バックグラウンド スレッド操作が完了した後に何らかのアクションをトリガーしたいと考えています。
したがって、以下のようなスレッド コールバック インターフェイスを作成しました。
インターフェイスOnThreadCompleted.java
package xml.parser;
public interface OnThreadCompleted {
public void OnThreadCompleted();
}
ここに、スレッドを拡張する実際のXMLParserThread.javaがあります
public class XMLParserThread extends Thread {
ArrayList<Integer> listWeatherCode;
ArrayList<String> listWeatherDesc;
ArrayList<String> listIcon_day;
ArrayList<String> listIcon_night;
Context context;
String fileName;
XMLParser xmlParser;
OnThreadCompleted listner;
public XMLParserThread(Context context, String fileName,
OnThreadCompleted listner) {
this.context = context;
this.fileName = fileName;
this.listner = listner;
}
@Override
public void run() {
xmlParser = new XMLParser();
listWeatherCode = new ArrayList<Integer>();
listWeatherDesc = new ArrayList<String>();
listIcon_day = new ArrayList<String>();
listIcon_night = new ArrayList<String>();
String xmlResponse = null;
try {
xmlResponse = xmlParser.getXmlFromFile(context, fileName);
Document doc = xmlParser.getDomElement(xmlResponse);
NodeList nList = doc.getElementsByTagName("condition");
for (int i = 0; i < nList.getLength(); i++) {
Element element = (Element) nList.item(i);
listWeatherCode.add(Integer.valueOf(xmlParser.getValue(element,
"code")));
listWeatherDesc.add(xmlParser.getValue(element, "description"));
listIcon_day.add(xmlParser.getValue(element, "day_icon"));
listIcon_night.add(xmlParser.getValue(element, "night_icon"));
}
Log.e("listWeatherCode", listWeatherCode.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.run();
}
}
そして、私は自分のアクティビティで自分のスレッドを次のように呼び出しています
private void callXMLParserThread() {
String fileName = "weather_conditions.xml";
parserThread = new XMLParserThread(context, fileName,
new OnThreadCompleted() {
@Override
public void OnThreadCompleted() {
Log.e("parserThread State", parserThread.getState()
+ ""); // **Label 2**
}
});
parserThread.start();
Log.e("parserThread State", parserThread.getState()
+ ""); // **Label 1**
}
実験:
ラベル 1 に記載されているログが Thread の状態を として返していることを確認しましたWAITING
。また、スレッドがすべての操作を実行していることも確認しました。
問題
アクティビティでコールバック メソッドを呼び出していないため、ラベル 2 で述べたように、アクティビティのログは何も返しません。
どこが間違っているのか教えてください。
前もって感謝します