ばかげた/奇妙な質問があるかもしれません
私はAndroidとJavaが初めてで、Androidのメソッドとそれらの使用方法を理解するためのアドバイスが必要です
私はこのようなメインアクティビティクラスを持っています
extends Activity implements OnClickListener{
private static final String TAG = "ServicesDemo";
public String myimageURL;
private EditText Lyrics;
private ImageView AlbumPic;
private Button play, stop;
private TextView Artist, Song, Album, News, Lyric;
private UpdateTimeTask m_updateTime;
private Handler m_handler;
Parser data;
/** The delay in milliseconds between updates. */
private final int DELAY = 20000;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Artist =(TextView)findViewById(R.id.tvArtist);
Song =(TextView)findViewById(R.id.tvSongTitle);
Album =(TextView)findViewById(R.id.tvAlbum);
play = (Button) findViewById(R.id.play);
stop = (Button) findViewById(R.id.stop);
Lyrics = (EditText) findViewById(R.id.tvLyrics);
News = (TextView)findViewById(R.id.tvAnouncement);
AlbumPic = (ImageView) findViewById(R.id.AlbumPic);
play.setOnClickListener(this);
stop.setOnClickListener(this);
m_updateTime = new UpdateTimeTask();
m_handler = new Handler();
m_handler.post(m_updateTime);
}
private class UpdateTimeTask implements Runnable {
public void run() {
try {
SAXParserFactory saxPF = SAXParserFactory.newInstance();
SAXParser saxP = saxPF.newSAXParser();
XMLReader xmlR = saxP.getXMLReader();
URL url = new URL("http://www.mysite.com/AndroidTest.php");
XMLHandler myXMLHandler = new XMLHandler();
xmlR.setContentHandler(myXMLHandler);
xmlR.parse(new InputSource(url.openStream()));
} catch (Exception e) {
System.out.println(e);
}
data = XMLHandler.data;
for (int i = 0; i < data.getTitle().size(); i++) {
Lyrics.setText(data.getLyric().get(i));
myimageURL = data.getPic().get(i);
Song.setText("Title = "+data.getTitle().get(i));
Artist.setText("Artist = "+data.getArtist().get(i));
Album.setText("Album = "+data.getAlbum().get(i));
}
downloadFile(myimageURL );
}
Bitmap bmImg;
void downloadFile(String fileUrl) {
URL myFileUrl = null;
try {
myFileUrl = new URL(fileUrl);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bmImg = BitmapFactory.decodeStream(is);
AlbumPic.setImageBitmap(bmImg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
m_handler.postDelayed(m_updateTime, DELAY);
AlbumPic.clearAnimation();
}
}
コードは正常に動作します
ご覧のとおり、タイマーとサービスを使用しています
サービスコードは「my_service」という別のクラスに書かれていますタイマーコードはメインクラスに書かれています
私の質問は、「タイマークラス」などの別のクラスのメインクラスにあるタイマーコードを配置する必要があることです
そして、サービスの場合と同じように、メインクラスから呼び出します
それとも今のままでいいの?
XMLはインターネットサーバー上にあるため、asynctaskを使用する必要がありますか?
asynctask は 1 回しか実行されないことを正しく理解していたので、asynctask を使用する場合は、UI を最新の状態に保つためにタイマーと組み合わせて使用する必要があります
ありがとう
ps は「クラス」と同じ「スレッド」です