Android XML阅读器出错
我有一个可正常工作的XML解析器,但是如果用户连接到未浏览应用程序中断的网络。要设置一个功能来检测用户是否连接,但上面提到的问题,用户将被连接,但没有浏览。Android XML阅读器出错
我的代码如下全:
public void chamaParser(){
Boolean conected = Conectado(this);
if(conected == true){
new DoInBackground().execute();
} else {
mPullRefreshListViewRSS.onRefreshComplete();
new AlertDialog.Builder(PullToRefreshListActivityRSS.this)
.setTitle("Alerta!")
.setMessage("Não foi possível estabelecer uma conexão com a Internet, verifique sua rede ou tente novamente mais tarde.")
.setNeutralButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {}
}).show();
}
}
public void do_update() {
RssParser.parse();
}
public static boolean Conectado(Context context) {
try {
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
String LogSync = null;
String LogToUserTitle = null;
if (cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected()) {
LogSync += "\nConectado a Internet 3G ";
LogToUserTitle += "Conectado a Internet 3G ";
return true;
} else if(cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
LogSync += "\nConectado a Internet WIFI ";
LogToUserTitle += "Conectado a Internet WIFI ";
return true;
} else {
LogSync += "\nNão possui conexão com a internet ";
LogToUserTitle += "Não possui conexão com a internet ";
return false;
}
} catch (Exception e) {
return false;
}
}
private class DoInBackground extends AsyncTask<Void, Void, Void> implements DialogInterface.OnCancelListener {
private ProgressDialog dialog;
protected void onPreExecute() {
//dialog = ProgressDialog.show(PullToRefreshListActivityRSS.this, "", "Carregando...", true);
dialog = ProgressDialog.show(PullToRefreshListActivityRSS.this, "", "Carregando...", true, true, new DialogInterface.OnCancelListener(){
@Override
public void onCancel(DialogInterface dialog) {
mPullRefreshListViewRSS.onRefreshComplete();
DoInBackground.this.cancel(true);
// finish();
}
});
}
protected Void doInBackground(Void... unused) {
PodcastAdapterRSS.topBarRSS=true;
do_update();
return null;
}
XML解析器:
public class RssParser {
public static void parse() {
URL url;
try {
url = new URL("http://www.xxxx.com.br/feed/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc;
doc = db.parse(url.openStream());
doc.getDocumentElement().normalize();
NodeList itemLst = doc.getElementsByTagName("item");
arrays.Title = new String[itemLst.getLength()];
arrays.Link = new String[itemLst.getLength()];
arrays.Description = new String[itemLst.getLength()];
// arrays.PodcastMedia = new String[itemLst.getLength()];
for(int i=0; i < itemLst.getLength(); i++){
Node item = itemLst.item(i);
if(item.getNodeType() == Node.ELEMENT_NODE){
Element ielem = (Element)item;
NodeList title = ielem.getElementsByTagName("title");
NodeList link = ielem.getElementsByTagName("link");
//NodeList description = ielem.getElementsByTagName("description");
NodeList content = ielem.getElementsByTagName("description");
// NodeList media = ielem.getElementsByTagName("media:content");
// String mediaurl = media.item(0).getAttributes().getNamedItem("url").getNodeValue();
arrays.Title[i] = title.item(0).getChildNodes().item(0).getNodeValue();
arrays.Link[i] = link.item(0).getChildNodes().item(0).getNodeValue();
arrays.Description[i] = content.item(0).getChildNodes().item(0).getNodeValue();
}
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
登录猫:
07-30 15:20:48.319:W/System.err的(10997): 的java.net.UnknownHostException:www.xxxx.com.br 07-30 15:20:48.319:W/System.err的(10997):在 java.net.InetAddress.lookupHostByName(InetAddress.java:508)07-30 15:20:48.319:W/System.err(10997):at java.net.InetAddress.getAllByNameImpl(InetAddress.java:296) 07-30 15:20:48.319:W/System.err(10997):at java.net.InetAddress.getAllByName(InetAddress.java:258)07-30 15:20:48.319:W/System.err (10997):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection(HttpConnection.java:69) 07-30 15:20:48.319:W/System.err的(10997 ):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection(HttpConnection.java:48) 07-30 15:20:48.319:W/System.err的(10997):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection $ Address.connect(H ttpConnection.java:322) 07-30 15:20:48.319:W/System.err的(10997):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool .java:89) 07-30 15:20:48.319:W/System.err(10997):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl。 java:285) 07-30 15:20:48.319:W/System.err(10997):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java :267) 07-30 15:20:48.319:W/System.err(10997):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java: 1018) 07-30 15:20:48.319:W/System .err(10997):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:726) 07-30 15:20:48.329:W/System。 err(10997):at tabbar.rss.RssParser.parse(RssParser.java:30)07-30 15:20:48.329: W/System.err(10997):at tabbar.rss.PullToRefreshListActivityRSS.do_update( PullToRefreshListActivityRSS.java:91) 07-30 15:20:48.329:W/System.err(10997):at tabbar.rss.PullToRefreshListActivityRSS $ DoInBackground.doInBackground(PullToRefreshListActivityRSS.java:205) 07-30 15:20 :48.329:W/System.err的(10997):在 tabbar.rss.PullToRefreshListActivityRSS $ DoInBackground.doInBackground(PullToRefreshListActivityRSS.java:1) 07-30 15:20:4 8.329:W/System.err(10997):at android.os.AsyncTask $ 2.call(AsyncTask.java:185)07-30 15:20:48.329: W/System.err(10997):at java .util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:306) 07-30 15:20:48.329:W/System.err的(10997):在 java.util.concurrent.FutureTask.run(FutureTask。 java:138)07-30 15:20:48.329:W/System.err(10997):at java.util.concurrent.ThreadPoolExecutor。runWorker(ThreadPoolExecutor.java:1088) 07-30 15:20:48.329:W/System.err(10997):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:581) 07- 30 15:20:48.329:W/System.err(10997):在 java.lang.Thread.run(Thread.java:1019)07-30 15:20:48.329: W/dalvikvm(10997):threadid = 1:线程以未捕获异常退出 (group = 0x401fc560)07-30 15:20:48.339:E/AndroidRuntime(10997):致命 EXCEPTION:main 07-30 15:20:48.339:E/AndroidRuntime(10997) : java.lang.NullPointerException 07-30 15:20:48.339: E/AndroidRuntime(10997):at tabbar.rss.PullToRefreshListActivityRSS.populate_listview(PullToRefreshListActivityRSS.java:101) 07-3 0 15:20:48.339:E/AndroidRuntime(10997):at tabbar.rss.PullToRefreshListActivityRSS $ DoInBackground.onPostExecute(PullToRefreshListActivityRSS.java:214) 07-30 15:20:48.339:E/AndroidRuntime(10997):at tabbar.rss.PullToRefreshListActivityRSS $ DoInBackground.onPostExecute(PullToRefreshListActivityRSS.java:1) 07-30 15:20:48.339:E/AndroidRuntime(10997):at android.os.AsyncTask.finish(AsyncTask.java:417) 07-30 15:20:48.339: E/AndroidRuntime(10997):at android.os.AsyncTask.access $ 300(AsyncTask.java:127)07-30 15:20:48.339:E/AndroidRuntime(10997) :at android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:429) 07-30 15:20:48.339:E/AndroidRuntime(10997):at android.os.Handler.dispatchMessage(Handler.java:99)07-30 15:20:48.339:E/AndroidRuntime(10997):at android.os.Looper.loop(Looper.java:130)07- 30 15:20:48.339: E/AndroidRuntime(10997):at android.app.ActivityThread.main(ActivityThread.java:3689)07-30 15:20:48.339:E/AndroidRuntime(10997):at java.lang.reflect.Method.invokeNative(Native Method)07-30 15:20:48.339:E/AndroidRuntime(10997):at java.lang.reflect.Method.invoke(Method.java:507)07- 30 15:20:48.339: E/AndroidRuntime(10997):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:875) 07-30 15:20:48.339:E/AndroidRuntime (10997):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633)07-30 15:20:48.339:E/AndroidRuntime(10997):at dalvik.system.NativeStart.main(Native Method)
尝试增加给你的清单:
<uses-permission android:name="android.permission.INTERNET" />
如果不工作,请回答以下两个问题:
Android java.net.UnknownHostException: Host is unresolved
Android java.net.UnknownHostException: Host is unresolved (strategy question)
你需要给你的asynctask一个超时处理程序,因为你已经连接但没有下载任何东西。把超时周边的3000 - 5000毫秒
如何创建一个超时处理:
我做了以下操作: \t \t do_update(); \t \t尝试{\t \t DoInBackground.this.get(30000,TimeUnit.MILLISECONDS); \t \t}赶上(InterruptedException的发送){ \t \t \t \t // TODO自动生成的catch程序块 \t \t \t \t e.printStackTrace(); \t \t}赶上(为ExecutionException E){ \t \t \t \t // TODO自动生成的catch程序块 \t \t \t \t e.printStackTrace(); \t \t}赶上(TimeoutException异常E){ \t \t \t // TODO自动生成的catch程序块 \t \t \t e.printStackTrace(); \t \t} \t}); 适用于在帖子中报告的问题,但是当用户有连接时他创建了另一个用户,他希望在AsyncTask中投入时间开始下载Feed:/ – jucajl 2012-07-31 03:39:00
好的,你说它可以阻止你的应用程序打破了,但你又造成了另一个问题?下一个问题是什么? – Stark 2012-07-31 14:41:26
什么日志猫说? – MAC 2012-07-30 18:00:59
什么是错误。 – 2012-07-30 18:09:17
已被添加到帖子! – jucajl 2012-07-30 18:22:58