2012-11-13 54 views
-1

我想定期獲取音頻元數據,如歌曲名稱和藝術家姓名。 因爲我在異步任務中使用媒體元數據檢索器。 所以問題是如何在一段時間內調用Async任務

1)在AsyncTask類我如何分配文本到Taxt-view。

2)如何在特定時間內調用該異步任務類,如30秒的時間間隔。

3)有一些文字我只需要在一天中取一次。那麼如何檢查上次獲取數據的時間?也即,用於存儲獲取數據,並用它的ListView的最佳方法?(我的意思是我需要其存儲到數據庫或任何散列映射或數組列表?)

這裏是元數據retriver代碼

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

有一個每30秒運行一次的服務。 – Raghunandan

+0

@Raghunandan你可以請詳細告訴我...比如我如何每30秒調用一次服務,並且我需要在服務中使用異步任務?如果是的話,我又該如何將文本分配給文本視圖?......以及最後一個問題,我如何編寫能夠一天解析json並且下次從數據庫獲取數據的代碼? –

回答

2

1)在AsyncTask類中,如何將文本分配給Taxt-view。

你不能因爲你沒有在UIThread上運行。恕我直言,最佳做法是使用onPostExecute()將此值返回給UIThread。另一種選擇是將runOnUIThread()用於您自己的Runnable課程。

2)我如何在特定時間內調用異步任務類,如 30秒的時間間隔。

您可以使用ScheduledExecutorService

3)有一些文字我只需要在一天中取一次。所以 如何檢查上次獲取數據的時間?

將上次保存到your DB

來存儲獲取數據,並用它的ListView的最佳方法?(ⅰ 意思是我需要存儲到這數據庫或任何散列映射或陣列 列表?)

子類(延伸)ArrayAdapter爲您自己的需要,那麼你可以直接使用它來餵養ListViewHere就是一個例子。

0

使用處理程序,您可以使用postDelayed創建每30秒運行一次的runnable。

相關問題