0

URL から XML ファイルを取得しようとしていますが、応答がなく、文字列 xml が null であるためコードが停止します。何が問題なのか教えていただけますか?

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

具体的にお答えください。ご協力いただきありがとうございます。

4

5 に答える 5

1

なぜ HTTPPost を使用しているのですか?? データも送信していません。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();

}
于 2012-09-03T13:20:43.057 に答える
0

これを試して:

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();
}
于 2012-09-03T13:38:08.060 に答える
0

geturldata() の場合

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

}

于 2012-09-03T13:44:47.697 に答える
0

別のスレッドからコードを開始してみてください。

 new Thread(new Runnable()
 {

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

    }
  }).start();
于 2012-09-03T13:26:08.193 に答える
0

例外を理解する必要があります。xml の理由nullは、「何か」がうまくいかなかったためです。これによりException、おそらく何が問題なのかが適切に説明された がスローされました。これが発生すると、Exception誰かがそれを処理するまで「上に」スローされます。

のすべてのサブクラスにExceptionは異なる「フレーバー」があり、特定の場合にスローされます。これにより、エラーに「対応」できます。たとえば、何がうまくいかなかったかをユーザーに伝えたり、デバッグのために何かをログに記録したりできます。

あなたの場合、すべての例外を 1 か所で「キャッチ」します。例外が発生すると、後のコードcatch (Exception e)が実行されます。ここでは、何かを印刷する以外は何もしません (これは LogCat でオレンジ色に表示されます)。その後、何事もなかったかのように続行します。しかし、xml は null になり、プログラムにとっては良くありません。また、後でプログラムがクラッシュするため、LogCat エントリに気付かなかったようです。

今回、Eldhose M Babu があなたの問題を解決しました。次回、何か他の問題が発生した場合 (および http 要求で多くの問題が発生する可能性があります)、プログラムは同じ動作を示します。例外をよく読んで、静かに処理しすぎないように注意してください。

于 2012-09-03T13:59:14.913 に答える