Ich versuche, Xml mit einem separaten Thread zu analysieren. Das kleine Code-Snippet des gesamten Codes ist wie folgt:Run-Methode wird nicht aufgerufen Thread
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try{
c=c1;
URL url = new URL(url1);
HttpURLConnection con= (HttpURLConnection) url.openConnection();
InputStream i= con.getInputStream();
xf=XmlPullParserFactory.newInstance();
xp=xf.newPullParser();
xp.setInput(i,null);
parseXML(xp,c);
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
t.start();
Aber es scheint, die Run-Methode wird nicht selbst aufgerufen. Kann mir bitte jemand helfen, herauszufinden, was ich hier vermisse.
EDIT: Es folgt der gesamte Code in XML bezogen werden:
public void fetchXml(String u,final Context c1) throws IOException, XmlPullParserException, InterruptedException {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try{
c=c1;
URL url = new URL(url1);
HttpURLConnection con= (HttpURLConnection) url.openConnection();
InputStream i= con.getInputStream();
xf=XmlPullParserFactory.newInstance();
xp=xf.newPullParser();
xp.setInput(i,null);
parseXML(xp,c);
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
t.start();
t.join();
}
public void parseXML(XmlPullParser xp,Context c) throws XmlPullParserException, IOException {
int event;
String text=null;
Toast.makeText(c, "inside parse", Toast.LENGTH_LONG).show();
event=xp.getEventType();
while(event!=XmlPullParser.END_DOCUMENT)
{
String name=xp.getName();
switch(event)
{
case XmlPullParser.START_TAG :
break;
case XmlPullParser.TEXT :
text=xp.getText();
break;
case XmlPullParser.END_TAG :
if(name.equals("country")){
country=text;
Toast.makeText(c, "Country"+country, Toast.LENGTH_LONG).show();
}
else if(name.equals("humidity")){
humidity=xp.getAttributeValue(null,"value");
Toast.makeText(c, "humidity"+humidity, Toast.LENGTH_LONG).show();
}
else if (name.equals("pressure"))
{
pressure=xp.getAttributeValue(null,"value");
Toast.makeText(c, "pressure"+pressure, Toast.LENGTH_LONG).show();
}
else{}
break;
}
event=xp.next();
}
parsingcomplete=true;
}
Auch wenn ich überprüfte die logcat Ich erhalte die folgende Fehlermeldung für den Toast Aussage, die ich in der parseXML Funktion oben schrieb.
04-11 07:59:08.891 31361-31580/com.example.hp.xmlparsing W/System.err: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
04-11 07:59:08.892 31361-31580/com.example.hp.xmlparsing W/System.err: at android.os.Handler.<init>(Handler.java:200)
Es sieht aus wie die run-Methode läuft fine..but ich die Ausnahme bin immer:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Kann jemand bitte helfen ...
Was lässt Sie denken, dass es nicht angerufen wird? – Savior
Hinzufügen 't.join()' nach 't.start()' –
@ElliottFrisch nur neugierig wie wird t.join() einen Unterschied machen? – Jois