0

我正在使用 JAVA Android SDK 开发 Deezer 应用程序。我已经设法使用 Deezer 方法登录(出现一个允许用户使用他的 deezer 或 facebook 帐户登录的弹出窗口)。

但现在我想访问用户数据(姓名/身份证...)以备将来使用。我目前正在使用

DeezerRequest request_name = new DeezerRequest("/user/me");

但是应用程序抛出异常,要求获取 access_token。我有它,但我不知道如何将它提供给请求(并且 deezer 开发网站并没有真正的帮助,因为他认为你知道如何处理它)

如果有帮助,我可以发布更多代码。谢谢你的帮助。

4

2 回答 2

1

正确登录后,这是我使用的代码(取自您的 sdk zip 文件中的示例 Deezer 应用程序)

在您的活动中:

private RequestListener userRequestListenerHandler = new UserRequestHandler();

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

....

searchUser();
}

public void searchUser(){

    AsyncDeezerTask searchAsyncUser = new AsyncDeezerTaskWithDialog(this,  deezerConnect, userRequestListenerHandler);
        DeezerRequest request = new DeezerRequest("user/me");
        searchAsyncUser.execute(request);

}

public void searchUserFinish(User user) {
        // TODO Auto-generated method stub
        String name = user.getFirstname();
        Sring lastname = user.getLastname();
        //... other user data
        }


private class UserRequestHandler implements RequestListener{

        @Override
        public void onComplete(String response, Object arg1) {
            // TODO Auto-generated method stub

            try{


                User user = new DeezerDataReader<User>(User.class).read(response);

                searchUserFinish(user);

            }catch (IllegalStateException e){
                handleError(e);
                e.printStackTrace();
            }

        }

        @Override
        public void onDeezerError(DeezerError e, Object arg1) {
            // TODO Auto-generated method stub
            handleError(e);
        }

        @Override
        public void onIOException(IOException e, Object arg1) {
            // TODO Auto-generated method stub
            handleError(e);
        }

        @Override
        public void onMalformedURLException(MalformedURLException e,
                Object arg1) {
            // TODO Auto-generated method stub
            handleError(e);

        }

        @Override
        public void onOAuthException(OAuthException e, Object arg1) {
            // TODO Auto-generated method stub
            handleError(e);
        }

    }

public void handleError(Error e){
Toast.maketext(this,e,Toast.Length_Short).show();
}

ASYNC DEEZER 任务

public class AsyncDeezerTaskWithDialog extends AsyncDeezerTask {
    /** Progress dialog to show user that the request is beeing processed. */
    private ProgressDialog progressDialog;

    /**
     * Simply creates an Deezer task with a dialog.
     * @param context the context used to create the dialog into.
     * @param deezerConnect the DeezerConnect object used to connect to Deezer web services.
     * @param listener the request listener.
     */
    public AsyncDeezerTaskWithDialog(Context context, DeezerConnect deezerConnect,
            RequestListener listener ) {
        super(deezerConnect, listener );
        progressDialog = new ProgressDialog( context );
        progressDialog.setCancelable( true );
        progressDialog.setOnCancelListener( new OnCancelHandler() );
    }//met

    @Override
    protected void onPreExecute() {
        progressDialog.setMessage( "Contacting Deezer..." );
        progressDialog.show();
        super.onPreExecute();
    }//met

    @Override
    public void onPostExecute( String s ) {
        //http://stackoverflow.com/questions/2745061/java-lang-illegalargumentexception-view-not-attached-to-window-manager
        try {
            if( progressDialog.isShowing() ) {
                progressDialog.dismiss();
            }//if
        } catch (IllegalArgumentException e) {
            //can happen sometimes, and nothing to get against it
        }//catch
        super.onPostExecute( s );
    }//met

    @Override
    protected void onCancelled() {
        //http://stackoverflow.com/questions/2745061/java-lang-illegalargumentexception-view-not-attached-to-window-manager
        try {
            if ( progressDialog.isShowing() ) {
                progressDialog.dismiss();
            }//if
        } catch (IllegalArgumentException e) {
            //can happen sometimes, and nothing to get against it
        }//catch
        super.onCancelled();
    }//met

    private class OnCancelHandler implements OnCancelListener {
        @Override
        public void onCancel(DialogInterface dialog) {
            cancel( true );
        }//met
    }//inner class
}//class

DEEZER 数据阅读器类

public class DeezerDataReader<T extends Object> {

    /** Class to pass to the Gson parser to create POJOs. */
    private Class<T> clazz = null;

    /** Creates a reader. 
     * @param clazz class to pass to the Gson parser to create POJOs. 
     * */
    public DeezerDataReader( Class<T> clazz ) {
        if( clazz == null ){
            throw new IllegalArgumentException( "Clazz can't be null." );
        }//if
        this.clazz = clazz;
    }//cons

    /**
     * DAO method to read (deserialize) data from a json string.
     * @param json the json string to deserialize.
     * @return a list of typed data from Deezer. The list can't be null, but may be empty.
     * @throws IllegalStateException if the parser encounters an error in json format.
     */
    public T read( String json ) throws IllegalStateException {
        Gson gson = new Gson(); 
        JsonObject object = new JsonParser().parse(json).getAsJsonObject();
        return gson.fromJson( object, clazz );
    }//met

}//met
于 2013-06-11T17:02:11.490 回答
1

太好了,有人帮我将访问令牌链接到 deezerConnect :

/** DeezerConnect object used for auhtentification or request. */
private DeezerConnect deezerConnect = new DeezerConnectImpl(APP_ID);
//----
deezerConnect.setAccessToken(getApplicationContext(), access_token);

获得访问令牌的原因是

deezerConnect.authorize(MainActivity.this, PERMISSIONS,
            new LoginDialogHandler());

//----
private class LoginDialogHandler implements DialogListener {
    @Override
    public void onComplete(final Bundle values) {

        MainActivity.access_token = values.getString("access_token");
    }
//----
}
于 2013-06-12T11:54:54.330 回答