2012-12-06 23 views
0

這是我的網址後:未收到來自回叫網址的任何數據。 Android在哪裏出錯?

String urlParameters = "&consumer_key="+AppSession.getPocketConsumerKey()+"&client_secret="+AppSession.getPocketRedirectUri(); 
    String request = "https://getpocket.com/v3/oauth/request"; 
    URL url; 
    try { 




     url = new URL(request); 
     HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();   
     connection.setDoOutput(true); 
     connection.setDoInput(true); 
     connection.setInstanceFollowRedirects(false); 
     connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     connection.setRequestProperty("charset", "utf-8"); 
     connection.setRequestProperty("X-Accept","application/x-www-form-urlencoded"); 
     connection.setUseCaches (false); 

     connection.connect(); 
     DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     Log.d("urlparmas",urlParameters); 
     wr.flush(); 
     wr.close(); 



     InputStream is = connection.getInputStream(); 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
     String line; 
     StringBuffer response = new StringBuffer(); 
     while((line = rd.readLine()) != null) { 
      response.append(line); 
      response.append('\r'); 
     } 
     rd.close(); 
     Log.d("response",response.toString()); 

     } catch (Exception e) { 

     e.printStackTrace(); 


     } 

我的重定向URI:MyApp的://回調

<activity android:name="com.app.account.Register" android:launchMode="singleTask"> 
       <intent-filter> 

    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
    <data android:scheme="MyApp" android:host="callback"/> 


        </intent-filter> 
      </activity> 

所以,我只是沒有得到從回調URL任何答覆。想知道我在代碼中出錯的地方。

編輯:

InputStream is = connection.getInputStream(); 
      BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
      String line; 
      StringBuffer response = new StringBuffer(); 
      while((line = rd.readLine()) != null) { 
       response.append(line); 
       response.append('\r'); 
      } 
      rd.close(); 
      Log.d("response",response.toString()); 

這將產生錯誤。

+0

兩件事一些技巧:首先,是你的catch塊?最有可能的是拋出異常,會告訴你到底發生了什麼。 第二:您的清單中是否設置了Internet權限? – slund

+0

讓我重新發布整個代碼。 – Hick

+0

已編輯併發布整個功能。 – Hick

回答

1

您可能需要設置請求類型,並指定您需要輸入流。在嘗試使用輸入流之前,您還應該檢查請求中的響應代碼。

您在下面發佈的異常表示您的服務器使用自定義SSL證書導致了問題。您可能需要創建一個可供您的HttpsURLConnection使用的本地SSL信任存儲。 This blog post涵蓋如何做到這一點,一旦你這樣做,你可以用它從你的連接

喜歡的東西

HttpsURLConnection yc = (HttpsURLConnection)pocketUrl.openConnection(); 
yc.setDoInput(true); 
yc.setRequestMethod("GET"); 
yc.setSSLSocketFactory(sslContext.getSocketFactory()); 
if (urlConnection.getResponseCode() != 200) { 
    // handle error here 
    final String responseMessage = yc.getResponseMessage(); 
    Log.e(TAG, "Failed Response: " + responseMessage); 
    return; 
} 

BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); 
+0

那也是,爲什麼你完全使用「DefaultHttpClient」?因爲據我所知,你應該使用HttpURLConnection類與URL類(輕量級Java庫)或DefaultHttpClient(重量級,但更可定製的Apache lib) – iBecar

+0

12-07 03:43:27.771:W/System.err(4617) :導致:java.security.cert.CertificateException:java.security.cert.CertPathValidatorException:找不到證書路徑的信任錨點。 – Hick

+0

我得到一個java.io.FileNotFoundException:https://getpocket.com/v3/oauth/request錯誤。不知道爲什麼,但。 – Hick