小编Fil*_*ipR的帖子

Java泛型:绑定不匹配:该类型不是该类型的有界参数的有效替代

我面临以下问题:

我有这些类和接口定义

public abstract class ViewModelRefreshPostListFragment<T extends IRefreshPostViewCallback, R extends RefreshPostViewModel<T>>
    extends RefreshPostListFragment implements IRefreshPostView {

    private final ViewModelHelper<T, R> mViewModeHelper = //error here
        new ViewModelHelper<>(); 

...
}

public abstract class RefreshPostViewModel<R1 extends IRefreshPostViewCallback> extends AbstractViewModel<IRefreshPostViewCallback> {}

public class ViewModelHelper<T extends IView, R extends AbstractViewModel<T>> {}

public abstract class AbstractViewModel<T extends IView> {}

public interface IRefreshPostViewCallback extends IView {}
Run Code Online (Sandbox Code Playgroud)

Eclipse仍然给出了这个错误:绑定不匹配:类型R不是该类型的有界参数<R extends AbstractViewModel<T>>的有效替代ViewModelHelper<T,R>

基于Java继承,我创建了这两个链:

来自ViewModelRefreshPostListFragment类定义的"链"
1)R extends RefreshPostViewModel<T>- > R extends RefreshPostViewModel<R1 …

java eclipse generics

6
推荐指数
1
解决办法
4851
查看次数

使用curl的php中的OAuth 2.0

我需要获取OAuth 2.0的access_token和refresh_token才能访问Google API,下面的php脚本应返回一个带有access_token,refresh_token的json,如下所示:

{
  "access_token" : "####",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "####"
}
Run Code Online (Sandbox Code Playgroud)

但是,PHP脚本仅向我返回此错误消息:

{
"error" : "invalid_request",
"error_description" : "Client must specify either client_id or client_assertion, not both"
}
Run Code Online (Sandbox Code Playgroud)

我试图删除client_secret / client_id并仅使用client_id / client_secret,但仍然遇到相同的错误。

PHP脚本

{
  "access_token" : "####",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "####"
}
Run Code Online (Sandbox Code Playgroud)

虽然cmd中的curl可以正常工作,并且可以返回我访问和刷新令牌,但没有任何错误。

curl --data "code=###&client_id=###.apps.googleusercontent.com&client_secret=###&redirect_uri=http://localhost/phpConnectToDB/csv/refreshFusionTable.php&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token
Run Code Online (Sandbox Code Playgroud)

尽管.php脚本存在并且位于给定的路径上,但我不明白为什么会收到丢失的方案错误。请问你能帮帮我吗 ?

编辑

解决了“ redirect_uri的无效参数值:缺少方案”的问题,我在CURLOPT_POSTFIELDS中只是将'redirect_uri'=> urlencode($ redirect_uri)替换为此'redirect_uri'=> $ redirect_uri。

php curl google-api http-post oauth-2.0

5
推荐指数
1
解决办法
1万
查看次数

我的应用程序在使用外部oauth2提供程序(facebook)时是否应该发出自己的访问权限?

我想让用户有可能在我的应用程序中使用一些外部oauth2提供程序(facebook)登录.客户端部分在本机应用程序中的移动设备上运行.
我不确定下面哪种方法我更喜欢?
A)客户端是否应该在每次请求时通过Facebook发送用户的访问令牌?在每个请求后端要求facebook验证访问令牌.根据验证结果,后端执行授权并将相应的结果返回给客户端.
或者B)后端是否要求facebook 仅在用户登录时验证访问令牌,然后发出自己的访问令牌,将访问令牌返回给客户端,客户端将使用此访问令牌向服务器发出请求以避免与Facebook发生冲突在每个请求?

我已经阅读了一些关于如何使用facebook实现auth的问题,而且大多数开发人员正在使用B,但我没有看到任何解释为什么使用A的好/坏?

我认为解决方案的好处:
A)后端不需要关心发布,刷新,验证访问令牌,因为这只能由facebook的授权服务器完成.
B)这个解决方案似乎更有效,因为它不需要在每次请求时连接到facebook.

security facebook-graph-api access-token oauth-2.0

5
推荐指数
1
解决办法
98
查看次数

将图像加载到 ImageView JavaFX

我想在对话框窗口中显示图像(保存在项目文件夹中),但是当我运行我的方法 showDialogWithImage 时,我得到 FileNotFoundExcpetion: imgs\pic1.jpg(系统找不到指定的文件),尽管图像位于那里。

我也尝试过以这种方式加载图像:
Image image = new Image(getClass().getResourceAsStream(path));,但遇到了同样的问题。

是否有其他一些可能性将图像加载到 ImageView ?
谢谢你的帮助!

  • 我的 Java 代码位于项目文件夹中的 src\myProject\gui 中。

  • path="imgs\pic1.jpg" // imgs 位于项目文件夹中

public void showDialogWithImage(String path) {
        final Stage dialogStage = new Stage();

        logger.info(path);

        InputStream is = null;
        try {
            is = new FileInputStream(path); // here I get FileNotFoundException
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        Image image = new Image(is);
        ImageView view = new ImageView();
        view.setImage(image);

        Button btnOK = new Button("OK");
        btnOK.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void …
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-2

4
推荐指数
1
解决办法
1万
查看次数

Facebook:在Android上刷新AccessToken

他们在AccessToken文档中说:"使用Facebook SDK的原生移动应用程序将获得长期访问令牌,大约可以使用60天.当使用您的应用程序的人向Facebook提出请求时,这些令牌将每天更新一次.服务器".
这是否意味着只有当Facebook服务器的请求来自客户端Android应用程序时(我不确定如何解释"......使用您的应用程序的人..."),那么访问令牌将被刷新?
在我的应用程序中,我使用检索访问令牌AccessToken.getCurrentAccessToken(),将访问令牌发送到我的服务器,服务器向Facebook的服务器发出请求,目的是验证收到的访问令牌.
在这种情况下,是否还会刷新访问令牌?(在这种情况下,服务器正在向FB的服务器发出请求,而不是直接"使用我的应用程序的人")

  • 如果是,Android客户端应用程序中的Facebook SDK如何知道我的服务器向Facebook的服务器发出了请求?AccessToken.getCurrentAccessToken()Android客户端是否返回刷新的访问令牌?

谢谢

编辑:这可以帮助其他人节省时间:我发现访问令牌在初始化FacebookSDK时会在某些条件下自动刷新(Facebook文档没有清楚地解释访问令牌是如何刷新的 - 请参阅上面的问题).
请注意我使用的是FacebookSDK 4.0 for Android.
按照下面的步骤操作:

  1. FacebookSDK.sdkInitialize(Context, InitializeCallback)

    if (AccessToken.getCurrentAccessToken() != null && Profile.getCurrentProfile() == null)

  2. Profile.fetchProfileForCurrentAccessToken()

  3. Utility.getGraphMeRequestWithCacheAsync()

    GraphRequest graphRequest = getGraphMeRequestWithCache(accessToken); graphRequest.setCallback(graphCallback); graphRequest.executeAsync();

  4. ... executeBatchAsync(GraphRequestBatch requests)
    GraphRequestAsyncTask asyncTask = new GraphRequestAsyncTask(requests); asyncTask.executeOnSettingsExecutor();
  5. GraphRequestAsyncTask doInBackground()方法

if (connection == null) { return requests.executeAndWait(); } else { return GraphRequest.executeConnectionAndWait(connection, requests); }

对于这两种情况,代码将以此方法结束:

public static List<GraphResponse> executeConnectionAndWait(
            HttpURLConnection connection,
            GraphRequestBatch requests)
Run Code Online (Sandbox Code Playgroud)
  1. 注意AccessTokenManager.getInstance().extendAccessTokenIfNeeded();线.顾名思义,每天最多扩展一次访问令牌.

facebook facebook-graph-api facebook-authentication facebook-access-token facebook-sdk-4.0

4
推荐指数
1
解决办法
4573
查看次数

在eclipselink中设置隔离级别

我想使用eclipse链接设置隔离级别,
我尝试了这两种方法:

  1. java.sql.Connection中

    mgr = EMF.get().createEntityManager();
    tx = mgr.getTransaction();
    tx.begin();
    
    java.sql.Connection connection = mgr.unwrap(java.sql.Connection.class);
    connection.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITTED);
    System.out.println("Connection: "+connection.getTransactionIsolation());
    //prints TRANSACTION_READ_COMMITED as expected
    
    org.eclipse.persistence.sessions.DatabaseLogin databaseLogin = new DatabaseLogin();
    System.out.println("DatabaseLoging: "+databaseLogin.getTransactionIsolation());
    //prints -1, representing transaction isolation is not set
    
    Run Code Online (Sandbox Code Playgroud)
  2. DatabaseLogin setTransationIsolation方法

    mgr = EMF.get().createEntityManager();
    tx = mgr.getTransaction();
    tx.begin();
    
    org.eclipse.persistence.sessions.DatabaseLogin databaseLogin = new DatabaseLogin();
    databaseLogin.setTransactionIsolation(DatabaseLogin.TRANSACTION_READ_COMMITTED);
    System.out.println("DatabaseLoging: "+databaseLogin.getTransactionIsolation());
    //prints TRANSACTION_READ_COMMITED as expected
    
    java.sql.Connection connection = mgr.unwrap(java.sql.Connection.class);
    System.out.println("Connection: "+connection.getTransactionIsolation());
    //prints TRANSACTION_REPEATABLE_READ
    
    Run Code Online (Sandbox Code Playgroud)

如您所见,getTransacationIsolation()方法的返回值之间存在一些不一致.我的问题是,在两种情况下都确实设置了哪种事务隔离?我知道默认情况下eclipse链接使用不同的连接进行读写操作,DatabaseLogin.setTransactionIsolation应该为两个连接设置隔离级别,那么为什么Connection.getTransactionIsolation仍然返回另一个隔离级别?

我正在使用应用程序范围的EntityManager,JPA 2.0,EclipseLink 2.5.2.
如果有更好的方法设置事务隔离,请告诉我.

jpa eclipselink isolation-level

4
推荐指数
1
解决办法
2498
查看次数

在 Android 上通过 NFC 获取信用卡信息

是否有一些 API,我可以使用它来读取 Android 设备上每个 NFC 的信用卡信息?或者是否可以使用某些 API 检索每个信用卡唯一的 ID?

我尝试过看起来很棒的Triangle IO,但他们的服务器似乎无法工作,因为我已经克隆了他们的示例 github 项目,并且还注册了一个密钥,正如他们在设置教程中所要求的那样。但是当我在 Android 上安装该应用程序时,出现错误:“提供的应用程序信息无效。请仔细检查您的应用程序 ID、访问 ID ...”。
然后我从 Google Play 下载了他们的官方示例应用程序。它给了我同样的错误。因此我假设 Triangle IO 服务器无法工作,是否有人使用 Triangle 并可以向我确认这一点?

android credit-card nfc

2
推荐指数
1
解决办法
1万
查看次数