0

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) に渡しましたが、どちらも機能しません。どうすればこれを達成できますか?

前もって感謝します!

4

1 に答える 1

4

... は、実際にその型の配列を渡していることを意味します。したがって、次のように変更すると:

protected Void doInBackground(String... arg0)

これを行う必要があります:

@Override
protected Void doInBackground(String... arg0)
{
    readRSS(arg0[0]);
    // should be readRSS(url) here
    return null;
}
于 2012-05-22T22:03:19.913 に答える