2012-09-03 4 views
0

URL에서 XML 파일을 가져 오려고했지만 Response가 표시되지 않고 String XML이 null이므로 나중에 코드가 중지됩니다. 문제가 무엇인지 말해 줄 수 있습니까? 당신이 HTTPPost를 사용하는 이유는XML을 사용하여 Java 구문 분석 응답 없음

public String getXmlFromUrl(String url) { 
String xml = null; 

    try { 


     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 
     HttpResponse httpResponse = httpClient.execute(httpPost); 
        // I printed the response here but I got nothing ! 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     xml = EntityUtils.toString(httpEntity); 
        return xml; 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

당신 응답의 특정하십시오 나는 당신의 도움이

+0

일부 데이터가 반환되면 브라우저에서 URL을 확인 했습니까? –

+0

'xml'을 인쇄 해 보셨습니까? xml = EntityUtils.toString (httpEntity); – rahul

+0

@DmytroDanylyk 예 @DmytroDanylyk 예. 제대로 작동 했음. –

답변

1

감사? 데이터를 보내지 않고 있습니다. HttpGet을 사용해보십시오.

이 시도 :

public String getXmlFromUrl(String url) throws Exception { 
    return new AsyncTask<String, Void, String>() { 
     @Override 
     protected String doInBackground(String... params) { 
      String xml = null; 
      try { 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpGet httpPost = new HttpGet(params[0]); 
       HttpResponse httpResponse = httpClient.execute(httpPost); 
       // I printed the response here but I got nothing ! 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       xml = EntityUtils.toString(httpEntity); 
       Log.i("DEMO", xml); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return xml; 
     } 
    }.execute(url).get(); 

} 
+0

을 체크했는데,이 "Document doc = parser.getDomElement (xml); // DOM 요소를 얻는 중"은 더 이상 작동하지 않는다. –

+0

이것은 재미있는 일이다 , asynctask를 만들고 같은 메소드에서 응답을 기다린다. 너 왜 그럴거야? – njzk2

+0

방금 ​​대답을 고쳤습니다 ... –

0

시도를 별도의 스레드에서 코드를 예를 들어, 시작

new Thread(new Runnable() 
{ 

    @Override 
    public void run() 
    { 
     // TODO your code here 

    } 
    }).start(); 
0

이 시도 : geturldata에 대한

try { 

    items = new ArrayList<String>(); 

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
    factory.setNamespaceAware(true); 
    XmlPullParser xpp = factory.newPullParser(); 
    xpp.setInput(new InputStreamReader(
      getUrlData(" url"))); 

    while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) { 
     Log.i(TAG, "doc started"); 
     if (xpp.getEventType() == XmlPullParser.START_TAG) { 
      if (xpp.getName().equals("entry")) { 
       items.add(xpp.getAttributeValue(0)); 
      } 
     } 
     xpp.next(); 

    } 
} catch (Throwable t) { 
    Toast.makeText(this, "Request failed: " + t.toString(), 
      Toast.LENGTH_LONG).show(); 
} 
0

()를

public InputStream getUrlData(String url) throws URISyntaxException, 
    ClientProtocolException, IOException { 

DefaultHttpClient client = new DefaultHttpClient(); 
HttpGet method = new HttpGet(new URI(url)); 
HttpResponse res = client.execute(method); 
return res.getEntity().getContent(); 

}

0

당신은 예외을 이해해야합니다. xml이 null 인 이유는 '무언가'가 잘못되어 있기 때문입니다. 이것은 무엇이 잘못되었는지에 대한 좋은 설명과 함께 Exception을 던졌습니다. 이 경우 누군가가 처리 할 때까지 Exception이 '작동'됩니다.

Exception의 모든 하위 클래스에는 다른 '풍미'가 있으며 특정 경우에 발생합니다. 이렇게하면 오류에 '대응'할 수 있습니다. 예를 들어, 무엇이 잘못되었는지 사용자에게 알리거나 디버깅을 위해 로그를 남길 수 있습니다.

예외가 발생하면 catch (Exception e) 이후의 코드가 실행되는 단일 예외에서 모든 예외를 catch합니다. 당신은 여기서 아무것도하지 않고 약간의 물건을 인쇄합니다 (이것은 당신의 LogCat에 주황색으로 보일 것입니다). 그런 다음 아무 일도없는 것처럼 계속 진행됩니다. 그러나 xml은 널 (null)이되어 프로그램에 좋지 않습니다. 나중에 프로그램이 충돌하기 때문에 LogCat 항목을 알아 내지 못했을 것입니다.

이번에는 Eldhose M Babu가 문제를 해결했습니다. 다음 번에 다른 일이 잘못되면 (htttp 요청에서 많은 문제가 발생할 수 있음) 프로그램에 동일한 동작이 표시됩니다. 예외를 시도하고 읽으며 너무 조용하게 처리 할 때주의하십시오.

+0

ur 도움을 위해 각 예외 dw thx를 처리했습니다. –