我想定期获取音频元数据,如歌曲名称和艺术家姓名。 因为我在Async-task中使用媒体元数据检索器。 所以问题是
1)在AsyncTask类中,如何将文本分配给Taxt-view。
2)如何在特定时间内调用Async-task类,如30秒时间间隔。
3)有一些文字我需要一天只能获取一次。那么如何在上次获取数据时检查?还有哪个是存储获取数据并将其用于Listview的最佳方法?(我的意思是我需要将其存储到数据库或任何散列图或数组列表中?)
这是元数据转发器代码
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.afragment, container, false);
}
@Override
public void onStart() {
super.onStart();
initfrag();
}
private void initfrag() {
// TODO Auto-generated method stub
lv1=(ListView)getView().findViewById(R.id.list);
tv=(TextView)getView().findViewById(R.id.tv1);
tv1=(TextView)getView().findViewById(R.id.tv2);
LongOperation task=new LongOperation();
task.execute();
}
class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
String link = "http://xyz-radio-link.ogg";
metaRetriever.setDataSource(link, new HashMap<String, String>());
// get mp3 info
title = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
artist = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
metaRetriever.release();
refreshtext();
return null;
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
public void refreshtext() {
// TODO Auto-generated method stub
Typeface tf = Typeface.createFromAsset(getActivity().getAssets(),"fonts/Roboto-Regular.ttf");
tv.setTypeface(tf);
tv1.setTypeface(tf);
tv.setText(artist);
tv1.setText(title);
}
答案 0 :(得分:2)
1)在AsyncTask类中,如何将文本分配给Taxt-view。
你不能,因为你没有在UIThread上运行。恕我直言最佳做法是使用onPostExecute()
将此值返回到UIThread。另一种选择是将runOnUIThread()
与您自己的Runnable
类一起使用。
2)如何在特定时间内调用Async-task类,例如 30秒的时间间隔。
您可以使用ScheduledExecutorService。
3)有一些文字我需要一天只能获取一次。所以 如何在上次获取数据时检查?
将最后一次保存到your DB。
存储获取数据并将其用于Listview的最佳方法?(i 意味着我需要将其存储到数据库或任何hashmap或数组中 列出?)
子类(扩展)ArrayAdapter
以满足您的需求,然后您可以直接使用它来提供ListView
。 Here就是一个例子。
答案 1 :(得分:0)
使用处理程序,您可以使用postDelayed创建一个每30秒运行一次的运行。