2012-11-13 3 views
-1

노래 이름 및 아티스트 이름과 같은 오디오 메타 데이터를 주기적으로 가져 오려고합니다. 나는 비동기 작업에서 미디어 메타 데이터 검색자를 사용하고 있습니다. 문제는비동기 작업을 일정 기간 동안 호출하는 방법

입니다. 1) AsyncTask 클래스에서 Taxt-view에 텍스트를 어떻게 할당 할 수 있습니까?

2) 어떻게 30 초 간격과 같이 특정 시간 내에 비동기 작업 클래스를 호출 할 수 있습니까?

3) 하루에 한 번만 가져와야하는 텍스트가 있습니다. 그래서 마지막으로 데이터를 가져 왔을 때 어떻게 확인할 수 있습니까? 또한이 데이터를 페치 저장 목록보기 위하여 사용하는 가장 좋은 방법? 인 (난 데이터베이스 또는 해시 맵 또는 어레이리스트에 해당하는 저장해야 의미?)

여기

메타하다 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에서 실행 중이므로 사용할 수 없습니다. IMHO 모범 사례는 onPostExecute()을 사용하여이 값을 UIThread에 반환하는 것입니다. 또 다른 선택은 자신의 Runnable 클래스와 함께 runOnUIThread()을 사용하는 것입니다.

2) 30 초 간격과 같이 특정 시간 내에 비동기 작업 클래스를 호출 할 수 있습니다.

ScheduledExecutorService을 사용할 수 있습니다.

3) 하루에 한 번만 가져와야하는 텍스트가 있습니다. 그래서 마지막으로 데이터를 가져 왔을 때 어떻게 확인할 수 있습니까?

your DB에 마지막으로 저장하십시오.

그 데이터를 페치 저장 목록보기 위하여 사용하는 가장 좋은 방법?

아강 (연장 (난 그 데이터베이스 나 해시 맵 또는 배열 리스트로? 것을 저장할 필요 의미 )) ArrayAdapter을 직접 필요로 할 경우 직접 사용하여 ListView을 먹일 수 있습니다. Here의 예입니다.

0

핸들러를 사용하면 postDelayed을 사용하여 30 초마다 실행할 실행 파일을 만들 수 있습니다.

관련 문제