2016-11-24 8 views
0

私たちはAndroid Studioでこのアプリを開発しています。そこで、ウェブサイトにリクエストを出したいときに、このコードを実行すると、私は「null」というエラーを受け取り続けます。このコードの変数のうちの1つはヌルです。誰かがそれを見て、いくつかの変数が正しく使用されていないため、ヌルエラーを提供している場所を参照できますか?このGETリクエストは何が問題なのですか?

public class SpotAlgo { 
String vidLink; 
int linkLoc; 
String testString = "<title>"; 
String result; 

public String gettheResult(String v) throws Exception{ 
    String sname = " "; 
    vidLink = "https://open.spotify.com/track/43PuMrRfbyyuz4QpZ3oAwN"; 

    URL obj = new URL(vidLink); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
    con.setRequestMethod("GET"); 
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    String inputLine = ""; 
    StringBuffer response = new StringBuffer(); 

    while ((inputLine = in.readLine()) != null) { 
     response.append(inputLine); 
    } 
    in.close(); 

    result = response.toString(); 


    linkLoc = result.indexOf(testString) + testString.length(); 
    for (int i = linkLoc; i < result.indexOf("on Spotify"); i++) { 
     sname += result.charAt(i) + ""; 
    } 
    return obj.toString(); 
} 

}

+2

をスタックトレースしてください。 – Ezequiel

+0

URLが404エラーを返すなど、返されたテキストに '' Spotify "'が含まれていないとどうなりますか?上記のように、エラーが何であるかを確認できるようにLogCatを提供してください。 –

+0

stacktraceは次のとおりです:表面0xa8d63f60にEGL_SWAP_BEHAVIORを設定できませんでした。エラー= EGL_BAD_MATCH – Programmer87

答えて

-1

あなたは)(実際には

con.setRequestMethod("GET"); 
con.connect(); 

あなたcon.getInputStreamを接続逃しました。接続は行われず、何もconに返されないため、nullです。

+0

私は間違っているかどうかを教えてください。 –

+0

明示的に 'con.connect()'を呼び出す必要はありません。 'getInputStream 'または' getOutputStream() 'です。詳細については、この[post](http://stackoverflow.com/questions/16122999/java-urlconnection-when-do-i-need-to-use-the-connect-method)を参照してください。 – Enzokie

+0

con.connect()を追加しましたが、それでもnullを返しています。 – Programmer87

0

何も問題ありません。

nullポインタ例外があると、コードの別の部分に関連していると思います。

はしかし、ここであなたがループ内でsnameの変数にテキストを追加します。このスニペットでは、それを

を改善するためのいくつかの提案です。この種の操作を行うと、StringBuilderがより効率的になります。

for (int i = linkLoc; i < result.indexOf("on Spotify"); i++) { 
    sname += result.charAt(i) + ""; 
} 
//Could be replaced b 
for (int i = linkLoc; i < result.indexOf("on Spotify"); i++) { 
    sb.append(result.charAt(i)); 
} 

その後、sb.toString()を使用して操作の結果を取得できます。

さらに重要なことに、ネットワーク操作を実行すると、結果がどのようになるか分かりません。あなたが得る結果に影響を与える多くの変数があり、多くの場合例外がスローされます。 try {} finally {}内にネットワークコードをラップし、finallyブロックで開いたリソースを閉じておくことが重要です(finallyブロックは常に実行されます)。タイプミス

編集2

一部の人々は、私は私のマシン上でそれを実行したとき、私は1を取得していない、それは404の例外を投げていると言って、404されているのを修正

編集 con.getInputStream()を実行するとIOExceptionがスローされるので、代わりにその代わりに

+0

これは私の間違いでした。 – Enzokie

+0

@誰もあなたは私が文字列を組み立てていることがヌルエラーを出していると言っていますか? – Programmer87

+0

いいえ、指定したコードにヌルエラーはありません。私はちょうどそれを組み立てるより効率的な方法を指摘しています。 –

関連する問題