2015-01-02 64 views
1

我正在研究一個我在github上找到的小型Android播放器。在Android應用中顯示Deezer用戶播放列表

我設法編譯了代碼,但我使用的是0.10.16 SDK。看起來github上的玩家是爲之前的版本編寫的。

我可以登錄,但是當我在播放列表點擊主屏幕和波紋管執行的代碼,我得到了一個空白屏幕:

private void getUserPlaylists() { 
    DeezerRequest request = DeezerRequestFactory.requestCurrentUserPlaylists(); 
    AsyncDeezerTask task = new AsyncDeezerTask(mDeezerConnect, 
      new JsonRequestListener() { 

       @SuppressWarnings("unchecked") 
       @Override 
       public void onResult(final Object result, final Object requestId) { 

        mPlaylistList.clear(); 

        try { 
         mPlaylistList.addAll((List<Playlist>) result); 
        } 
        catch (ClassCastException e) { 
         handleError(e); 
        } 

        if (mPlaylistList.isEmpty()) { 
         Toast.makeText(UserPlaylistsActivity.this, getResources() 
           .getString(R.string.no_results), Toast.LENGTH_LONG).show(); 
        } 

        mPlaylistAdapter.notifyDataSetChanged(); 
       } 

       @Override 
       public void onComplete(final String response, Object requestId) { 
        //TODO 
        Toast.makeText(UserPlaylistsActivity.this, "Playlist_onComplete", 
          Toast.LENGTH_LONG).show(); 


       } 


       @Override 
       public void onUnparsedResult(final String response, Object requestId) { 
        //TODO 
       } 


       @Override 
       public void onException(Exception exception, Object requestId) { 


        if(exception instanceof OAuthException){ 
         handleError(exception); 
        } 
        else if(exception instanceof MalformedURLException){ 
         handleError(exception); 
        } 
        else if(exception instanceof IOException){ 
         handleError(exception); 
        } 
        else if(exception instanceof DeezerError){ 
         handleError(exception); 
        } 
        else if(exception instanceof JSONException){ 
         handleError(exception); 
        } 
        else{ 
         //do nothing 
        } 
       } 


      }); 
    task.execute(request); 
} 

我想原因是,上面的代碼是爲寫以前的SDK版本,顯然與「onResult」一起工作。然而,最新的SDK使用「onComplete」,它返回一個未解析的JSON字符串。

我的問題是:

  • 有內置的SDK一類,將解析JSON響應
  • 在那裏將接受解析響應
  • 一類是有一個功能,將在屏幕上顯示

我正在查看文檔,但沒有找到任何有用的東西。

有沒有人用最新的SDK實現這一點?

編輯:

private void getUserPlaylists() { 
    DeezerRequest request = DeezerRequestFactory.requestCurrentUserPlaylists(); 
    AsyncDeezerTask task = new AsyncDeezerTask(mDeezerConnect, 
      new JsonRequestListener() { 

       @SuppressWarnings("unchecked") 
       @Override 
       public void onResult(final Object result, final Object requestId) { 

        mPlaylistList.clear(); 

        try { 
         mPlaylistList.addAll((List<Playlist>) result); 
        } 
        catch (ClassCastException e) { 
         handleError(e); 
        } 

        if (mPlaylistList.isEmpty()) { 
         Toast.makeText(UserPlaylistsActivity.this, getResources() 
           .getString(R.string.no_results), Toast.LENGTH_LONG).show(); 
        } 

        mPlaylistAdapter.notifyDataSetChanged(); 
       } 



       @Override 
       public void onUnparsedResult(final String response, Object requestId) { 
        //TODO 
       } 


       @Override 
       public void onException(Exception exception, Object requestId) { 


        if(exception instanceof OAuthException){ 
         handleError(exception); 
        } 
        else if(exception instanceof MalformedURLException){ 
         handleError(exception); 
        } 
        else if(exception instanceof IOException){ 
         handleError(exception); 
        } 
        else if(exception instanceof DeezerError){ 
         handleError(exception); 
        } 
        else if(exception instanceof JSONException){ 
         handleError(exception); 
        } 
        else{ 
         //do nothing 
        } 
       } 


      }); 
    task.execute(request); 
} 

這現在與0.10.16 SDK。刪除onComplete()並且所有數據現在都正確解析。菜單正常,播放成功。

回答

1

問題在於你重寫了onComplete(String, Object)方法。這種方法已經在JsonRequestListener的實現中出現,所以你不應該自己重寫它,至少在沒有調用super.onComplete(response, requestId)的情況下不應該重寫它。

當重寫JsonResultListener類,你應該只實現onResult(Object, Object),你這樣做了,onUnparsedResult(String, Object)方法,以防JSON不能自動解析,如果發生異常onException(Exception, Object)

+0

是的,那是一個伎倆。該應用現在可以正常工作。謝謝! – iggy

相關問題