2012-12-04 2 views
1

나는 HTTPResponse에 NullPointerException gwtting 오전 그러나 구문 분석을 위해 인터넷에 연결하는 데 사용하는 다음 클래스를 사용하고 있습니다. 또한 매니페스트 파일에 대한 인터넷 사용 권한을 추가했습니다. 여기 내 코드가HTTP 응답에 널 포인터 예외

public class XMLParser { 

    public String getXMLfromUrl(String Url){ 

     String xml = null; 

     try{ 

       DefaultHttpClien httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(); 
       HttpResponse httpRes = httpClient.execute(httpPost); 
       final int status = httpRes.getStatusLine().getStatusCode(); 

       if (status != HttpStatus.SC_OK) { 
        Log.d("meassage", "------------"); 
       } 

       HttpEntity httpEnt = httpRes.getEntity(); 
       xml = EntityUtils.toString(httpEnt); 

     }catch(UnsupportedEncodingException e){ 
      e.printStackTrace(); 
     }catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return xml; 
    } 

    public Document getDomElement(String xml){ 

     Document doc = null; 

     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

     try{ 

      DocumentBuilder db = dbf.newDocumentBuilder(); 
      InputSource is = new InputSource(); 
      is.setCharacterStream(new StringReader(xml)); 
      doc = db.parse(is); 

     }catch (ParserConfigurationException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } catch (SAXException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } catch (IOException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } 


     return doc; 
    } 
} 

내가 실수를했으며 변경을 요구할 것을 제안합니다. 감사. 다음은 httpPost에 대한 URL을 지정하지 않은 스택 추적

12-04 16:58:00.109: E/AndroidRuntime(2662): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.gallery.parsing.madhuri/com.example.gallery.parsing.madhuri.MainActivity}: java.lang.NullPointerException 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at android.os.Looper.loop(Looper.java:137) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at dalvik.system.NativeStart.main(Native Method) 
12-04 16:58:00.109: E/AndroidRuntime(2662): Caused by: java.lang.NullPointerException 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:496) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at com.example.gallery.parsing.madhuri.XMLParser.getXMLfromUrl(XMLParser.java:37) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at com.example.gallery.parsing.madhuri.MainActivity.onCreate(MainActivity.java:40) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at android.app.Activity.performCreate(Activity.java:4465) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
12-04 16:58:00.109: E/AndroidRuntime(2662):  ... 11 more 
+0

을 여기

new YourTask().execute(""); 

코드입니다 스택 추적을 게시 한 경우 유용 할 것입니다. – span

+0

스택 추적 내 질문을 업데이트했습니다. –

+0

httpPost에 대한 URL을 지정하지 않았습니다. – Sharmilee

답변

2

입니다. 그 이유는 응답이 null이되는 이유입니다.

이 그것은

 HttpResponse httpResponse = new HttpResponse(url); 
+0

알았어.하지만 이제는 오류가 발생했다. android.os.NetworkOnMainThreadException –

+0

메인 스레드에서 네트워크 연결을하고있다. 작업자 스레드에서 네트워크 연결을 추가하십시오. – Sharmilee

+0

어떤 안드로이드 버전을 사용 하시나요? XMLParser는 자체 스레드 또는 기본 스레드에서 실행됩니까? – Mikhaili

0

O로 초기화되어야한다 그것은

HttpResponse httpResponse = new HttpResponse(url); 

로 초기화하고 또한 그들을 위해 비동기 클래스를 작성해야 httpPost

에 대한 URL을 지정했습니다. asych 클래스에서 호출하십시오.

1

AsyncTask를 사용하여 데이터를로드하고 구문 분석하면 성능이 향상되고 NetworkOnMainThreadException Beacouse가 표시되지 않습니다. AsyncTask는 다른 스레드입니다. 귀하의 클래스 (getXmlFromUrl (URL))와 함께 아래 코드를 게시하십시오.() (에서 OnCreate에 아마도) 당신은 그냥 전화를해야 실행하려면 여기

private class YourTask extends AsyncTask<String, Void, String> { 
      String xmlContent = ""; 
      @Override 
     protected String doInBackground(String... s) { 

      //Here you have to make the loading/parsing tasks 
      //Don't call any UI actions here. For example a Toast.show() this will couse Exceptions 
      // UI stuff you have to make in onPostExecute method 
       xmlContent=getXMLfromUrl(YOUR_URL); 
     } 

     @Override 
     protected void onPreExecute() { 
      // This method will called during doInBackground is in process 
      // Here you can for example show a ProgressDialog 
     } 

     @Override 
     protected void onPostExecute(Long result) { 
      // onPostExecute is called when doInBackground finished 
      // Here you can for example fill your Listview with the content loaded in doInBackground method 


        // here you can process he loading content in doInBackground 
        // for example: 


    Toast.makeText(getApplicationContext(), xmlContent, Toast.LENGTH_SHORT).show(); 


     } 

} 

당신이 AsyncTasks에 대해 자세히 알아볼 수 있습니다 :

AsyncTask developer Guide