1

私はいくつかの奇妙な問題に閉じ込められており、自分が間違っていることを理解できません。UserInfo が表示されている画面が 1 つあります。そのために、Web サービスを起動したときに XML を取得し、そのデータを解析して表示します。これは 2.3.3 ではうまく機能しますが、ICS では解析に失敗しました。

これがデータを解析する私の方法です::

XML ::

<?xml version="1.0"?>
<root>
 <displayname>AAAA</displayname>
 <gender>male</gender>
 <city>AAAA</city>
 <state>AAAA</state>
 <country>AAA</country>
 <image>http://www.example.com/documentSetting/test.jpg</image>
</root>

私の非同期タスク::

private class GetUserInfoTask extends AsyncTask<String, Integer, Document> 
{
    Document document = null;

    GetUserInfoTask()
    {
        webAPIRequest = new WebAPIRequest();
    }

    @Override
    protected Document doInBackground(String... urls) 
    {
        document = webAPIRequest.performGet(urls[0]);

        return document;
    }

    protected void onPostExecute(Document result) 
    {
        try
        {
            if(result!=null)
            {
                Element node = (Element)result.getElementsByTagName("root").item(0);

                if(node!=null)
                {
                    websiteList = node.getElementsByTagName("root");
                    check = websiteList.getLength();

                    if(check!=0)
                    {
                        arrUserInfoList=null;
                        if(arrUserInfoList==null)
                        {
                            arrUserInfoList = new ArrayList<UserProfile>();
                        }

                        for(int j=0;j<websiteList.getLength();j++)

                        {                               
                            Element checkNode=(Element)websiteList.item(j);
                            UserProfile user=new UserProfile(); 

                            msg.display_name = getValueFromNode(checkNode,"displayname");
                            msg.gender = getValueFromNode(checkNode,"gender");
                            user.city = getValueFromNode(checkNode,"city");
                            user.state = getValueFromNode(checkNode,"state");
                            user.country = getValueFromNode(checkNode,"country");
                            user.image = getValueFromNode(checkNode,"image");

                            arrUserInfoList.add(user);
                        }

                        txt_user_name_top.setText(arrUserInfoList.get(0).displayname);
                        txt_user_gender.setText(arrUserInfoList.get(0).gender);
                        txt_user_status.setText(arrUserInfoList.get(0).status);
                        txt_user_country.setText(arrUserInfoList.get(0).country);
                        txt_user_country.setText(arrUserInfoList.get(0).city);

                    }

                }
                new LoadingFriendImagesTask().execute();
            }
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
 }

私の PerformGet メソッド::

public Document performGet(String url) 
{
    Log.d("webAPIRequest url = ", url);
    Document doc = null;
    try 
    {
        DefaultHttpClient client = new DefaultHttpClient();

        URI uri = new URI(url);
        HttpGet method = new HttpGet(uri);
        HttpResponse res = client.execute(method);
        InputStream data = res.getEntity().getContent();
        String s =  convertStreamToString(data);
        ByteArrayInputStream str=new ByteArrayInputStream(s.getBytes());
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();

        doc = db.parse(str);

    }
    catch (ClientProtocolException e) 
    {
         e.printStackTrace();
    }   
    catch (IOException e) 
    {
        e.printStackTrace();
    }
    catch (URISyntaxException e)
    {
        e.printStackTrace();
    } 
    catch (ParserConfigurationException e) 
    {
        e.printStackTrace();
    } 
    catch (SAXException e) 
    {
        e.printStackTrace();
    }

    return doc;
}

あなたの貴重な提案と助けをいただければ幸いです...事前に感謝します... :)

4

1 に答える 1

0

私はこのように私の問題を解決しました。

このコードを置き換えました...

else
{
node = (Element)result.getElementsByTagName("root").item(0);

if(node!=null)
{
    websiteList = node.getElementsByTagName("root");
    check = websiteList.getLength();

    if(check!=0)
    {
        if(arrUserInfoList==null)
        {
            arrUserInfoList = new ArrayList<UserProfile>();
        }

        for(int j=0;j<websiteList.getLength();j++)
        {                           
        }
    }
}
}

これとともに ::

else
{
websiteList = (NodeList)document.getElementsByTagName("root");
check = websiteList.getLength();

if(check!=0)
{
    if(arrUserInfoList==null)
    {
        arrUserInfoList = new ArrayList<UserProfile>();
    }

    for(int j=0;j<websiteList.getLength();j++)
    {
    }
}
}

これは私にとって魅力のようにうまくいく.. :)

于 2012-09-20T10:14:20.213 に答える