-1

我想定期获取音频元数据,例如歌曲名称和艺术家姓名。为此,我在异步任务中使用媒体元数据检索器。所以问题是

1) 在 AsyncTask 类中,我如何将文本分配给 Taxt-view。

2)我如何在特定时间内调用该异步任务类,例如 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);
}
4

2 回答 2

2

1) 在 AsyncTask 类中,我如何将文本分配给 Taxt-view。

你不能因为你没有在 UIThread 上运行。恕我直言,最佳做法是使用onPostExecute(). 另一种选择是runOnUIThread()与您自己的Runnable课程一起使用。

2)我如何在特定时间内调用该异步任务类,例如 30 秒的时间间隔。

您可以使用ScheduledExecutorService

3)有些文本我每天只需要获取一次。那么如何检查上次获取数据的时间呢?

将最后一次保存到您的数据库中。

存储获取数据并将其用于 Listview 的最佳方法?(我的意思是我需要将其存储到数据库或任何哈希图或数组列表中?)

子类(扩展)ArrayAdapter以满足您自己的需要,然后您可以直接使用它来提供ListView. 是一个例子。

于 2012-11-13T16:02:48.667 回答
0

使用处理程序,您可以使用postDelayed创建每 30 秒运行一次的 runnable 。

于 2012-11-13T15:59:49.907 回答