2016-04-06 3 views
4

を行うにはいないようです:のAndroid URLConnection.setRequestPropertyは()私はアンドロイドのスタジオで<code>URLConnection.setRequestProperty()</code>のソースコードを見て、それが何かを設定しますように、それはいないようです何

public void setRequestProperty(String field, String newValue) { 
     checkNotConnected(); 
     if (field == null) { 
      throw new NullPointerException("field == null"); 
     } 
    } 

とここにcheckNotConnected():

private void checkNotConnected() { 
     if (connected) { 
      throw new IllegalStateException("Already connected"); 
     } 
    } 

私はここで何が欠けていますか? HttpURLConnection "拡張クラス"はsetRequestProperty()の実装を持たないため、このメソッドは絶対に何もしないようです。

+0

接続後にプロパティを設定できないようにし、フィールドがnullでないことを確認します。 –

+0

はい、接続が確立されておらず、フィールドがnullでない場合は、リクエストプロパティを設定する必要があります。リクエストプロパティを設定するコードはどこですか? –

+0

あなたが慎重に見ても、接続メソッドも抽象であり、誰もいない場合、実装はコンパイル済みのjarファイルにあります –

答えて

0

URLConnectionは、特定のプロトコルを実装していない抽象基本クラスです。

あなたはHttpURLConnectionを探しています。 URLConnectionクラスのこの実装は、HTTPプロトコルでの使用のためにsetRequestProperty()メソッドをオーバーライドし、機能的に実装します。

UPDATEは

精密検査後、私はHttpURLConnectionも抽象クラスであることがわかりました。 Android Studioでは、クラス宣言を右クリックして、Go To - > Implementation(s)をクリックすることで、任意の実装を見つけることができます。

実際の具体的な実装には、私たちが扱っているSDKが付属しています。私はJava固有の実装(rt.jar)しか見つけられませんでした。

setRequestProperty()の実際の実装がSDKに含まれていない可能性があります。

+0

http://developer.android.com/reference/java/net/JarURLConnection.htmlもURLConnectionを拡張していますが、要求プロパティーの扱いが異なるため、抽象クラスとなります。 – whitebrow

+0

実際にHttpURLConnection.setRequestPropertyの実装をチェックすると、メソッドの本体で引数が使用されたことはなく、superは呼び出されません。私が間違っているとkhakisはプロパティの設定場所を尋ねています。 –

+0

まさに、@ NaN。Javaを理解するために、メソッドが子クラスで実装されていない場合、実行時に使用されるメソッドは最も近い相対スーパークラスにある実装です。階層がHttpURLConnection - > URLConnection - > Objectになっているので、呼び出されるURLConnectionのsetRequestProperty()の実装になるようです。 –

関連する問題