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(..)创建节点时使用.但是你似乎需要一个扁平的结构,所以我认为你不需要层次结构. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |