RSS フィードを読み込む Android アプリを実装しています。2 つのボタンを表示するための新しい画面を追加し、文字列値を AsyncTask に渡そうとするまでは、まったく問題なく動作します。アイデアは次のとおりです。画面には、ユーザーが選択できる 2 つのボタンが表示されます。ユーザーがいずれかのボタンをクリックすると、readRSS(url) への文字列 value(url) とともに AsyncTask が呼び出され、displayRSS(url) によって RSS フィードが表示されます。readRSS(url) はそれに応じて RSS フィードをロードします。
私のコードは以下の通りです:
import java.util.List;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class RSSProActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rss);
startLoadRSS();
}
private void startLoadRSS(){
new RSS_Load().execute();
}
//
private void preReadRSS()
{
Toast.makeText(this, "Reading RSS, Please wait.", Toast.LENGTH_LONG).show();
}
private StringBuffer readRSS(String url)
{
//depends on the inputs, will set the String value accordingly. It should be "url" but using the default value at the moment.
String urlStr = "http://www.bom.gov.au/fwo/IDZ00059.warnings_vic.xml";
AndroidSAXFeedParser saxFeedParser = new AndroidSAXFeedParser(urlStr);
List<RSSItem> parse = saxFeedParser.parse();
StringBuffer sb = new StringBuffer();
sb.append(parse.size()+" items found");
for(RSSItem item:parse){
sb.append(item.getTitle()+"posted at "+item.getDate());
sb.append(item.getDescription());
}
return sb;
}
private void displayRSS()
{
StringBuffer sb = readRSS(url);
TextView textView = new TextView(this);
textView.setText(sb.toString());
setContentView(textView);
Toast.makeText(this, "SUCCESS", Toast.LENGTH_LONG).show();
}
//AsyncTask
public class RSS_Load extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
super.onPreExecute();
preReadRSS();
}
@Override
protected Void doInBackground(Void... arg0) {
readRSS();
// should be readRSS(url) here
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
//super.onProgressUpdate(values);
// updateProgressBar(values[0]);
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// dismissProgressBar();
// should be displayRSS(url) here
displayRSS();
}
}
}
RSS_Load extends AsyncTask の値を変更しようとしていますが、コンパイル エラーが発生します。そこで、保護された Void doInBackground(String... url) を変更してから、その URL を readRSS(url) に渡しましたが、どちらも機能しません。どうすればこれを達成できますか?
前もって感謝します!