RSS 피드를로드하기 위해 Android 앱을 구현하고 있습니다. 두 개의 버튼을 표시하고 AsyncTask에 String 값을 전달하려고 새 화면을 추가하기 전까지는 완벽하게 작동합니다. 아이디어는 다음과 같습니다. 사용자가 선택할 수있는 두 개의 버튼이 화면에 표시됩니다. 사용자가 버튼 중 하나를 클릭하면 문자열 값 (url)에서 readRSS (url)와 함께 AsyncTask를 호출 한 다음 rss 피드가 displayRSS (url)에 의해 표시됩니다. readRSS (url)는 이에 따라 RSS 피드를로드합니다. 내가 RSS_Load의 값을 변경하기 위해 노력하고있어Android : AsyncTask에서 문자열 매개 변수를 전달 하시겠습니까?
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();
}
}
}
AsyncTask를 확장하지만 나에게 오류를 컴파일 제공 :
내 코드는 다음과 같습니다. 그래서 보호 된 Void doInBackground (String ... url)를 변경 한 다음 url을 readRSS (url)로 전달했지만 작동하지 않습니다. 어떻게해야합니까?
미리 감사드립니다.
는 "그 중 하나가 작동하지 않습니다"란 무엇을 의미 하는가? –
@ K-ballo는 여전히 컴파일 오류가 있음을 의미합니다. 하지만 arg0 [0]을 readRSS()에 전달하여 CaseyB가 제공 한 답을 사용하여 문제를 해결했습니다. –
내 대답이 효과가 있다면 그 옆에있는 체크 표시를 클릭하여 대답을 수락하십시오. – CaseyB