加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java.util.prefs.Preferences.put()有效,但Preferences.nodeExis

发布时间:2020-12-15 04:54:43 所属栏目:Java 来源:网络整理
导读:我有一些简单的代码,用于学习使用路标库的OAuth身份验证.我正在尝试使用 java.util.prefs.Preferences将请求令牌,令牌密钥和引脚保存为 Java首选项.将数据放入首选项工作正常(我检查文件已创建并存储信息).但是,在我将数据放入Preferences文件之后,我立即尝
我有一些简单的代码,用于学习使用路标库的OAuth身份验证.我正在尝试使用 java.util.prefs.Preferences将请求令牌,令牌密钥和引脚保存为 Java首选项.将数据放入首选项工作正常(我检查文件已创建并存储信息).但是,在我将数据放入Preferences文件之后,我立即尝试检查节点是否存在,并且总是得到错误.

我还尝试重新运行代码,并在尝试再次保存数据之前检查节点的存在,但我仍然得到错误.

我做错了什么?

这是代码:

package com.example;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.prefs.Preferences;

import oauth.signpost.OAuth;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import oauth.signpost.basic.DefaultOAuthConsumer;
import oauth.signpost.basic.DefaultOAuthProvider;

public class ReadMain {

    public static void main(String[] args) throws Exception {

        OAuthConsumer consumer = 
        new DefaultOAuthConsumer(
                "??","??");

        OAuthProvider provider = 
        new DefaultOAuthProvider(
            "https://www.readability.com/api/rest/v1/oauth/request_token/","https://www.readability.com/api/rest/v1/oauth/access_token/","https://www.readability.com/api/rest/v1/oauth/authorize/");

        System.out.println("Fetching request token from Readability...");

        Preferences prefs = Preferences.userNodeForPackage(ReadMain.class);

        final String PREF_TokenSecret    = "com/example/TS";
        final String PREF_RequestToken   = "com/example/RT";
        final String PREF_ReadabilityPin = "com/example/RP";

        boolean exists = 
            prefs.nodeExists( PREF_TokenSecret ) &&
        prefs.nodeExists( PREF_RequestToken ) &&
        prefs.nodeExists( PREF_ReadabilityPin );

        if ( prefs.nodeExists( PREF_TokenSecret ) )
        {
        System.out.println("Token secret exists!");
        }

        if ( prefs.nodeExists( PREF_RequestToken ) )
        {
        System.out.println("Request token exists!");
        }

        if ( prefs.nodeExists( PREF_ReadabilityPin ) )
        {
        System.out.println("Readability pin exists!");
        }

        String pin;

        if ( exists )
        {
        consumer.setTokenWithSecret( 
                prefs.get(PREF_RequestToken,""),prefs.get(PREF_TokenSecret,"") );
            pin = prefs.get(PREF_ReadabilityPin,"");
        }
        else
        {
        // we do not support callbacks,thus pass OOB
        String authUrl = provider.retrieveRequestToken(consumer,OAuth.OUT_OF_BAND);

        System.out.println( "Request token: " + consumer.getToken() );
        System.out.println( "Token secret: " + consumer.getTokenSecret() );

        prefs.put( PREF_RequestToken,consumer.getToken() );
        prefs.put( PREF_TokenSecret,consumer.getTokenSecret() );

        System.out.println( "Now visit:n" + authUrl + "n... and grant this app authorization" );
        System.out.println( "Enter the PIN code and hit ENTER when you're done:" );

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        pin = br.readLine();

        prefs.put(PREF_ReadabilityPin,pin);

        if ( prefs.nodeExists( PREF_TokenSecret ) )
        {
            System.out.println("Token secret exists!");
        }

        if ( prefs.nodeExists( PREF_RequestToken ) )
        {
            System.out.println("Request token exists!");
        }

        if ( prefs.nodeExists( PREF_ReadabilityPin ) )
        {
            System.out.println("Readability pin exists!");
        }
        }

        System.out.println("Fetching access token from Readability...");
        provider.retrieveAccessToken(consumer,pin);

        System.out.println("Access token: " + consumer.getToken());
        System.out.println("Token secret: " + consumer.getTokenSecret());

        URL url = new URL("https://www.readability.com/api/rest/v1/bookmarks?user=marcusps&archive=1");
        HttpURLConnection request = (HttpURLConnection) url.openConnection();

        consumer.sign(request);

        System.out.println("Sending request to Readability...");
        request.connect();

        System.out.println("Response: " + request.getResponseCode() + " "
            + request.getResponseMessage());
    }
}

解决方法

put(..)的相反操作是get(..).所以:

boolean exists = prefs.get(key,null) != null;

如果在指定键下找不到任何内容,则get(..)方法返回第二个参数.

nodeExists()与首选项的层次结构相关,可以在使用prefs.node(..)创建节点时使用.但是你似乎需要一个扁平的结构,所以我认为你不需要层次结构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读