2016-11-01 7 views
0

私はxmlパルサーにコードを持っていますが、何とか動作していません...ここにメインパーサーがあります。xmlplulsarがアンドロイドで動作していません

URL url; 
ArrayList<String> headlines = new ArrayList(); 
ArrayList<String> links = new ArrayList(); 
@Override 
protected Object doInBackground(Object[] objects) { 
    // Initializing instance variables 


    try { 
     url = new URL("http://feeds.bbci.co.uk/news/rss.xml?edition=uk"); 

     XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
     factory.setNamespaceAware(false); 
     XmlPullParser xpp = factory.newPullParser(); 

     // We will get the XML from an input stream 
     xpp.setInput(getInputStream(url), "UTF_8"); 

     boolean insideItem = false; 

     // Returns the type of current event: START_TAG, END_TAG, etc.. 
     int eventType = xpp.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      if (eventType == XmlPullParser.START_TAG) { 

       if (xpp.getName().equalsIgnoreCase("item")) { 
        insideItem = true; 
       } else if (xpp.getName().equalsIgnoreCase("title")) { 
        if (insideItem) 
         headlines.add(xpp.nextText()); //extract the headline 
       } else if (xpp.getName().equalsIgnoreCase("link")) { 
        if (insideItem) 
         links.add(xpp.nextText()); //extract the link of article 
        } 
      } else if (eventType == XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")) { 
       insideItem = false; 
      } 

      eventType = xpp.next(); //move to next element 

     } 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return headlines; 
} 


public InputStream getInputStream(URL url) { 
    try { 
     return url.openConnection().getInputStream(); 
    } catch (IOException e) { 
     return null; 
    } 
} 

public ArrayList<String> heads() 
{ 
    return headlines; 
} 

}

、ここアクティビティコードが

ある
private ArrayAdapter<String> adapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if (AppStatus.getInstance(this).isOnline()) { 

     Log.v("Home", "############################You are online!!!!"); 
     Toast.makeText(this,"Your online!!!!",Toast.LENGTH_LONG).show(); 

     ListView list = (ListView) findViewById(R.id.list); 

     ArrayList<String> headlines = new ArrayList<>(); 

     externalParser getXML = new externalParser(); 
     getXML.execute(); 
     headlines = getXML.heads(); 

     adapter = new ArrayAdapter<String>(this, android.R.layout.activity_list_item, headlines); 

     list.setAdapter(adapter); 

    } else { 

     Toast.makeText(this,"You are not online!!!!",Toast.LENGTH_LONG).show(); 
     Log.v("Home", "############################You are not online!!!!"); 
    } 

私は私のアプリトースト/ログ常にオフラインで言うと、それは解析されたXMLを表示しません...

を実行すると

はここに私のマニフェストです

、ここでは、それがインターネットに接続しているかどうかをチェックするクラスです...

NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); connected = networkInfo!= null & & networkInfo.isConnected(); リターンが接続されました。

私はエミュレータのインターネットをオフにしても、それはアプリケーションに違いはありません...それは常に私がオフラインだと言う...私はエミュレータのブラウザでインターネットを閲覧することができます。

ありがとうございました

答えて

0

インターネット接続の場合は正常に動作し、trueを返します。それはtrueを返し、あなたがメソッドに入ると

public boolean isConnected() { 
     boolean connected = false; 
     connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);; 
     NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
     return (connected = networkInfo != null && networkInfo.isConnected()); 
    } 

第二に、あなたはあなたのAsyncTaskのonPostExecute()にアダプタを移入すべきか、少なくともコールは必ずあなたのアダプタがなっているを作るためにonPostExecute()に()adapter.notifydatasetchanged doInBackground(オブジェクトparams [] ...)のサーバーからフェッチしたデータのリスト。

+0

こんにちは、私はいつも上記のコードでは利用できませんが、私はそれが大丈夫だと私はブラウザでエミュレータでブラウザができます...私はコードを指摘することができますどこでも私はadapter.notifydatasetchanged()私はこのおかげで新しくなったように混乱してしまった – hi4ppl

+0

こんにちは接続部分が固定されました。固定接続の問題をマニフェストでそれを動作させるフィードはlistviewとして何も返しません。 – hi4ppl

+0

最初に、AsyncTaskのdoInBackgroundメソッド(ループの後にループし、配列の長さをチェックすることができます)で応答を受け取っているかどうかを確認します。第二に –

関連する問題