2016-11-24 3 views
0

우리는 웹 사이트에 대한 요청을 받고자하는 Android Studio에서이 앱을 개발하고 있습니다.이 코드를 실행할 때 우리는 "null"이라는 오류가 계속 발생합니다. 이 코드 조각의 변수 중 하나가 null입니다. 누군가가 그것을보고 어떤 변수가 올바르게 사용되지 않고 따라서 null 오류를 제공하는 것을 감지 할 수있는 곳을 볼 수 있습니까?GET 요청에 어떤 문제가 있습니까?

+2

stacktrace를 Provice하십시오. – Ezequiel

+0

URL이 404 오류를 반환하는 경우와 같이 반환 된 텍스트에 ' "Spotify"가 포함되지 않은 경우 어떻게됩니까? 위에서 언급 한 바와 같이 오류가 무엇인지 알 수 있도록 LogCat을 제공하십시오. –

+0

stacktrace가 : 표면 0xa8d63f60에 EGL_SWAP_BEHAVIOR를 설정하지 못했습니다. 오류 = EGL_BAD_MATCH – Programmer87

답변

-1

당신은 실제로

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

귀하의 con.getInputStream를 연결 놓친

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(); 
} 

}(); 연결이 이루어지지 않고 아무것도 반환되지 않으므로 null입니다.

+0

이유를 부인한다. 그래서 나는 잘못된 것을 배울 수있다. –

+0

getInputStream을 사용하는 순간 암묵적으로 호출되기 때문에 명시 적으로'con.connect()'를 호출 할 필요가 없다. '또는'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

아무 것도 없습니다. 정상적으로 작동합니다.

널 포인터 예외가있는 경우 코드의 다른 부분과 관련 있다고 생각합니다.

그러나, 여기 당신이 루프에서 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 블록에서 열려있는 ressources를 닫는 것이 중요합니다. finally 블록은 항상 실행됩니다.

편집 오타에게 고정

편집이 일부 사람들은 404 예외를 던지고 말을

, 나는 내 컴퓨터에 그것을 실행했을 때 하나를 얻을, 그리고 404하지 않았다 당신이 con.getInputStream()을 할 때 IOException을 던질 것이므로 그 대신에 그럴 것입니다.

+0

그것은 내 실수였습니다. – Enzokie

+0

@ 아무도 당신은 내가 문자열을 조립하는 것은 null 오류를주는 것이라고 말하는거야? – Programmer87

+0

아니요, 제공 한 코드에 Null 오류가 없습니다. 나는 그것을 조립하는보다 효율적인 방법을 지적하고있다. –

관련 문제