2016-06-13 7 views
2

私は単にリストビューでRSSフィードのテキストを表示するだけのアンドロイドアプリケーションを持っています。アプリケーションは、メインアクティビティの特定の行にブレークポイントを持つ、デバッグモードで実行したときにのみフィードを取得します。非同期タスクは、デバッグモード(アンドロイド)でデータを取得するだけです

フィードが非同期的に取得されるため、これが起こる理由の1つになる可能性がありますが、デバッガを使わずにアプリケーションを実行するとフィードを即時に表示する方法がわかりません。ここで

が主な活動である:ここでは

public class MainActivity extends ListActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

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

    getXML.execute(); 

    headlines = getXML.heads(); 

    // Binding data 
    ArrayAdapter adapter = new ArrayAdapter(this, 
      android.R.layout.simple_list_item_1, headlines); 

    setListAdapter(adapter); 

}} 

は、バックグラウンドでバックグラウンド検索を行うクラスです:

public class RetrieveFeed extends AsyncTask { 

URL url; 
ArrayList<String> headlines = new ArrayList(); 
ArrayList<String> links = new ArrayList(); 


@Override 
protected Object doInBackground(Object[] params) { 

    try { 
     //does specific stuff here :) 

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

    return headlines; 
} 

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

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

答えて

3

問題がアクセスしようとしているありますAsyncTaskより前のデータは終了します。

getXML.execute(); 
headlines = getXML.heads(); 
// you execute your AsyncTask here and try to access it's data 
// immediately, without waiting for it to finish execution 

は、あなたがあなたの AsyncTaskonPostExecute()をオーバーライドする必要がある、これを修正( doInBackground()終了後に呼び出されている)と、そこからあなた ListViewをリフレッシュ/移入します。

MainActivityRetrieveFeedを内部クラスにすることができますので、ListViewに直接アクセスしたり、インターフェイス経由でコールバックメカニズムを実装したりすることができます。

後者を選択する場合は、例としてthis answerをチェックしてください。

実行中にProgressDialogを表示するには、onPreExecute()も上書きする必要があります。そこからあなたのダイアログを表示し、onPostExecute()に却下してください。

例としてthis answerを確認してください。

+0

ありがとうございました! – HaroldHibari

関連する問題