1

解析のためにインターネットに接続するために使用される次のクラスを使用していますが、HTTPResponse で NullPointerException を gwting しています。また、マニフェスト ファイルにインターネット アクセス許可を追加しました。これが私のコードです

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

どこで間違いを犯したかを見つけ出し、変更が必要であることを提案してください。ありがとう。ここにスタックトレースがあります

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
4

3 に答える 3

2

httpPost の URL が指定されていません。そのため、応答が null になっています。

として初期化する必要があります

        HttpResponse httpResponse = new HttpResponse(url);
于 2012-12-04T11:48:34.900 に答える
1

AsyncTaskを使用してデータをロードおよび解析すると、パフォーマンスが向上し、AsyncTaskは別のスレッドであるためNetworkOnMainThreadExceptionは発生しません。以下のコードをメソッド(getXmlFromUrl(Url))を使用してクラスに投稿します。実行するには、(おそらくOnCreate()で)呼び出す必要があります。

new YourTask().execute("");

コードは次のとおりです。

    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開発者ガイド

于 2012-12-04T12:16:38.940 に答える
0

o httpPost に任意の URL を指定

として初期化する必要があります

    HttpResponse httpResponse = new HttpResponse(url);

また、それらの非同期クラスを作成します。それらを非同期クラスで呼び出します

于 2012-12-04T12:08:19.513 に答える