Java 无法在片段中作为后台线程运行XMLParser

Java 无法在片段中作为后台线程运行XMLParser,java,android,multithreading,android-fragments,background-process,Java,Android,Multithreading,Android Fragments,Background Process,这是我的第一个问题,如果我离题了或者出了什么问题,请原谅! 我正在创建一个android应用程序,我被困在某个地方。。 我找到了一些教程,并尝试了以下内容。 这个场景是,我想在我的应用程序中使用XMLParser,并且我正在使用具有可切换视图的选项卡。我想在选项卡片段内的listview中显示项目。 我已经设法让他们在listview,但问题是,我不能让它在后台工作。我已经尝试创建新的线程,但没有工作! 我认为主活动需要显示fragmentview,但它无法返回视图,因为线程仍在进行中!我希望你

这是我的第一个问题,如果我离题了或者出了什么问题,请原谅! 我正在创建一个android应用程序,我被困在某个地方。。 我找到了一些教程,并尝试了以下内容。 这个场景是,我想在我的应用程序中使用XMLParser,并且我正在使用具有可切换视图的选项卡。我想在选项卡片段内的listview中显示项目。 我已经设法让他们在listview,但问题是,我不能让它在后台工作。我已经尝试创建新的线程,但没有工作! 我认为主活动需要显示fragmentview,但它无法返回视图,因为线程仍在进行中!我希望你能理解我的问题。。 有人能帮我吗? 下面是我的应用程序的片段类和xmlparser类

gamesfragment.java

public class GamesFragment extends Fragment {
// All static variables
public static final String URL = "http://api.androidhive.info/pizza/?format=xml";
// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_ID = "id";
static final String KEY_NAME = "name";
static final String KEY_COST = "cost";
static final String KEY_DESC = "description";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_games, container, false);
    setRetainInstance(true);
    ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();

    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(URL); // getting XML
    Document doc = parser.getDomElement(xml); // getting DOM element

    NodeList nl = doc.getElementsByTagName(KEY_ITEM);
    // looping through all item nodes <item>
    for (int i = 0; i < nl.getLength(); i++) {
        // creating new HashMap
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i);
        // adding each child node to HashMap key => value
        map.put(KEY_ID, parser.getValue(e, KEY_ID));
        map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
        map.put(KEY_COST, "Rs." + parser.getValue(e, KEY_COST));
        map.put(KEY_DESC, parser.getValue(e, KEY_DESC));

        // adding HashList to ArrayList
        menuItems.add(map);
    }

    // Adding menuItems to ListView
    ListAdapter adapter = new SimpleAdapter(getActivity(), menuItems,R.layout.list_item,
            new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] {
                    R.id.name, R.id.desciption, R.id.cost });
    final ListView lview = (ListView) rootView.findViewById(R.id.lview);
    lview.setAdapter(adapter);

    // selecting single ListView item
    //ListView lv = getListView();

    lview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem
            String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
            String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString();
            String description = ((TextView) view.findViewById(R.id.desciption)).getText().toString();

            // Starting new intent
            Intent in = new Intent(getActivity().getApplicationContext(), SingleMenuItemActivity.class);
            in.putExtra(KEY_NAME, name);
            in.putExtra(KEY_COST, cost);
            in.putExtra(KEY_DESC, description);
            startActivity(in);

        }
    });
    return rootView;
}
}
//xmlparser.java


public class XMLParser {

// constructor
public XMLParser() {

}

/**
 * Getting XML from URL making HTTP request
 * @param url string
 * */
public String getXmlFromUrl(String url) {
    String xml = null;

    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        xml = EntityUtils.toString(httpEntity);

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // return XML
    return xml;
}

/**
 * Getting XML DOM element
 * @param XML string
 * */
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;
}

/** Getting node value
  * @param elem element
  */
 public final String getElementValue( Node elem ) {
     Node child;
     if( elem != null){
         if (elem.hasChildNodes()){
             for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                 if( child.getNodeType() == Node.TEXT_NODE  ){
                     return child.getNodeValue();
                 }
             }
         }
     }
     return "";
 }

 /**
  * Getting node value
  * @param Element node
  * @param key string
  * */
 public String getValue(Element item, String str) {     
        NodeList n = item.getElementsByTagName(str);        
        return this.getElementValue(n.item(0));
    }
}

请帮忙

解析器不负责从某处获取内容,解析器只解析您提供给他的内容。因此,创建一些专用的东西,比如一个异步任务(在后台运行)来为您获取内容,然后创建一个异步任务来解析内容。您真的应该签出AsyncTask。看我的例子。。。(它应该可以工作,我没有实际测试它…:) 你可能应该看看谷歌截击库,更简单的HTTP内容

更新:

我包括了片段(检查onCreateView,尽管您可能应该寻找一个比onCreateView更好的地方来开始您的任务)、xml处理程序如何用于获取文档以及一些注释您如何访问文档…(同样,它应该可以工作,我没有测试它,它只是为了向您展示如何做…)

import java.io.IOException;
导入java.io.StringReader;
导入java.io.UnsupportedEncodingException;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.util.EntityUtils;
导入org.w3c.dom.Document;
导入org.xml.sax.InputSource;
导入org.xml.sax.SAXException;
导入android.app.Fragment;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
公共类GameFragment扩展片段{
//所有静态变量
公共静态最终字符串URL=”http://api.androidhive.info/pizza/?format=xml";
//XML节点密钥
静态最终字符串KEY\u ITEM=“ITEM”//父节点
静态最终字符串键\u ID=“ID”;
静态最终字符串键\u NAME=“NAME”;
静态最终字符串键\u COST=“COST”;
静态最终字符串键\u DESC=“description”;
私有静态类GetStuffFromUrlTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串url=params[0];
字符串xml=”“;
试一试{
//defaultHttpClient
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
xml=EntityUtils.toString(httpEntity);
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回xml;
}
}
私有静态类ParseStuffIGotFromSomeWhereTask扩展AsyncTask{
@凌驾
受保护文档doInBackground(字符串…参数){
字符串stringToParse=params[0];
Document Document=new XMLParser().getDoElement(stringToParse);
归还文件;
}
}
私有静态类XMLParser{
公共文档getDoElement(字符串xml){
单据单据=空;
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
试一试{
DocumentBuilder db=dbf.newDocumentBuilder();
InputSource is=新的InputSource();
is.setCharacterStream(新的StringReader(xml));
doc=db.parse(is);
}捕获(ParserConfiguration异常e){
Log.e(“错误:,e.getMessage());
返回null;
}捕获(SAXE异常){
Log.e(“错误:,e.getMessage());
返回null;
}捕获(IOE异常){
Log.e(“错误:,e.getMessage());
返回null;
}
退货单;
}
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.xyz,容器,假);
//这是我们用来解析从GetStuffFromUrl任务返回的XML的任务
final ParseStuffIGotFromSomeWhereTask parseTask=新ParseStuffIGotFromSomeWhereTask(){
@凌驾
PostExecute上的公共无效(文档){
//在这里,您可以访问作为解析操作结果的文档
//document.getElementsByTagName(XYZ)。。。
}
};
//这是我们用来从URL获取内容的任务
GetStuffFromUrlTask GetStuffFromUrlTask=新建GetStuffFromUrlTask(){
@凌驾
public void onPostExecute(字符串结果){
//任务已完成,字符串结果包含我们从URL获得的XML数据
parseTask.execute(result);//现在我们开始解析xml的任务
}
};
getStuffFromUrlTask.execute(URL);
返回rootView;
}
}

“…但这不起作用”不是一个好的错误描述。还有什么线索吗?异常,stacktrace…如何在XMLParser claas中在后台发出http请求???因为我的应用程序成功地运行了这个
public class GamesFragment extends Fragment {

    // All static variables
    public static final String URL = "http://api.androidhive.info/pizza/?format=xml";
    // XML node keys
    static final String KEY_ITEM = "item"; // parent node
    static final String KEY_ID = "id";
    static final String KEY_NAME = "name";
    static final String KEY_COST = "cost";
    static final String KEY_DESC = "description";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_games, container, false);
        setRetainInstance(true);
        ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();

        GetStuffFromUrlTask parser1 = new GetStuffFromUrlTask();

    //  XMLParser parser = new XMLParser();
        String xml = parser1.doInBackground(URL); // getting XML
        Document doc = parser1.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_ITEM);
        // looping through all item nodes <item>
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key => value
            map.put(KEY_ID, parser1.getValue(e, KEY_ID));
            map.put(KEY_NAME, parser1.getValue(e, KEY_NAME));
            map.put(KEY_COST, "Rs." + parser1.getValue(e, KEY_COST));
            map.put(KEY_DESC, parser1.getValue(e, KEY_DESC));

            // adding HashList to ArrayList
            menuItems.add(map);
        }

        // Adding menuItems to ListView
        ListAdapter adapter = new SimpleAdapter(getActivity(), menuItems,R.layout.list_item,
                new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] {
                        R.id.name, R.id.desciption, R.id.cost });
        final ListView lview = (ListView) rootView.findViewById(R.id.lview);
        lview.setAdapter(adapter);

        // selecting single ListView item
        //ListView lv = getListView();

        lview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // getting values from selected ListItem
                String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
                String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString();
                String description = ((TextView) view.findViewById(R.id.desciption)).getText().toString();

                // Starting new intent
                Intent in = new Intent(getActivity().getApplicationContext(), SingleMenuItemActivity.class);
                in.putExtra(KEY_NAME, name);
                in.putExtra(KEY_COST, cost);
                in.putExtra(KEY_DESC, description);
                startActivity(in);

            }
        });
        return rootView;
    }

private static class GetStuffFromUrlTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
        String url = params[0];
        String xml = "";
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            xml = EntityUtils.toString(httpEntity);

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return xml;
    }
    /**
     * Getting XML DOM element
     * @param XML string
     * */
    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;
    }

    /** Getting node value
      * @param elem element
      */
     public final String getElementValue( Node elem ) {
         Node child;
         if( elem != null){
             if (elem.hasChildNodes()){
                 for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                     if( child.getNodeType() == Node.TEXT_NODE  ){
                         return child.getNodeValue();
                     }
                 }
             }
         }
         return "";
     }

     /**
      * Getting node value
      * @param Element node
      * @param key string
      * */
     public String getValue(Element item, String str) {     
            NodeList n = item.getElementsByTagName(str);        
            return this.getElementValue(n.item(0));
        }
}

private static class ParseStuffIGotFromSomeWhereTask extends AsyncTask<String, Void, Boolean> {

    @Override
    protected Boolean doInBackground(String... params) {

        String stringToParse = params[0];
        boolean result = new XMLParser().parse(stringToParse);

        return result;
    }

}

private static class XMLParser {

    public boolean parse(String string) {
        return true;
    }

}

public GamesFragment() {

    new GetStuffFromUrlTask() {

        @Override
        public void onPostExecute(String resultIGotFromTheTask) {

            new ParseStuffIGotFromSomeWhereTask() {

                @Override
                public void onPostExecute(Boolean resultOfTheParseTask) {

                    Log.i("Parse successful?", resultOfTheParseTask.toString());

                }

            }.execute(resultIGotFromTheTask);


        }

    }.execute(URL);

}

/**
 * Getting XML DOM element
 * @param XML string
 * */
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;
}

/** Getting node value
  * @param elem element
  */
 public final String getElementValue( Node elem ) {
     Node child;
     if( elem != null){
         if (elem.hasChildNodes()){
             for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                 if( child.getNodeType() == Node.TEXT_NODE  ){
                     return child.getNodeValue();
                 }
             }
         }
     }
     return "";
 }

 /**
  * Getting node value
  * @param Element node
  * @param key string
  * */
 public String getValue(Element item, String str) {     
        NodeList n = item.getElementsByTagName(str);        
        return this.getElementValue(n.item(0));
    }
}    
04-07 18:23:37.234: E/AndroidRuntime(19673): FATAL EXCEPTION: main
04-07 18:23:37.234: E/AndroidRuntime(19673): android.os.NetworkOnMainThreadException
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at java.net.InetAddress.lookupHostByName(InetAddress.java:414)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:249)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at java.net.InetAddress.getAllByName(InetAddress.java:227)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at com.android.mygit.GamesFragment$GetStuffFromUrlTask.doInBackground(GamesFragment.java:125)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at com.android.mygit.GamesFragment.onCreateView(GamesFragment.java:63)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.View.measure(View.java:15349)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4950)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:315)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.View.measure(View.java:15349)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:850)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:579)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.View.measure(View.java:15349)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4950)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:315)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2152)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.View.measure(View.java:15349)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1851)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1101)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1274)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:999)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4217)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.Choreographer.doFrame(Choreographer.java:525)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.os.Handler.handleCallback(Handler.java:615)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.os.Looper.loop(Looper.java:137)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.app.ActivityThread.main(ActivityThread.java:4802)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at java.lang.reflect.Method.invokeNative(Native Method)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at java.lang.reflect.Method.invoke(Method.java:511)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:813)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:580)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:115)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at dalvik.system.NativeStart.main(Native Method)
04-07 18:23:37.234: E/AndroidRuntime(19673): FATAL EXCEPTION: main
04-07 18:23:37.234: E/AndroidRuntime(19673): android.os.NetworkOnMainThreadException
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at java.net.InetAddress.lookupHostByName(InetAddress.java:414)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:249)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at java.net.InetAddress.getAllByName(InetAddress.java:227)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at com.android.mygit.GamesFragment$GetStuffFromUrlTask.doInBackground(GamesFragment.java:125)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at com.android.mygit.GamesFragment.onCreateView(GamesFragment.java:63)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.View.measure(View.java:15349)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4950)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:315)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.View.measure(View.java:15349)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:850)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:579)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.View.measure(View.java:15349)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4950)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:315)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2152)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.View.measure(View.java:15349)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1851)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1101)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1274)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:999)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4217)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.Choreographer.doFrame(Choreographer.java:525)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.os.Handler.handleCallback(Handler.java:615)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.os.Looper.loop(Looper.java:137)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at android.app.ActivityThread.main(ActivityThread.java:4802)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at java.lang.reflect.Method.invokeNative(Native Method)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at java.lang.reflect.Method.invoke(Method.java:511)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:813)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:580)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:115)
04-07 18:23:37.234: E/AndroidRuntime(19673):    at dalvik.system.NativeStart.main(Native Method)
04-07 18:23:38.114: D/-heap(19673): GC_CONCURRENT freed 306K, 8% free 10130K/10951K, paused 17ms+2ms, total 64ms
import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import android.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class GameFragment extends Fragment {

// All static variables
public static final String URL = "http://api.androidhive.info/pizza/?format=xml";
// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_ID = "id";
static final String KEY_NAME = "name";
static final String KEY_COST = "cost";
static final String KEY_DESC = "description";

private static class GetStuffFromUrlTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
        String url = params[0];
        String xml = "";
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            xml = EntityUtils.toString(httpEntity);

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

}

private static class ParseStuffIGotFromSomeWhereTask extends AsyncTask<String, Void, Document> {

    @Override
    protected Document doInBackground(String... params) {

        String stringToParse = params[0];
        Document document = new XMLParser().getDomElement(stringToParse);

        return document;
    }

}

private static class XMLParser {

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

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.xyz, container, false);

    //This is the task we use to parse the XML we got back from the getStuffFromUrlTask
    final ParseStuffIGotFromSomeWhereTask parseTask = new ParseStuffIGotFromSomeWhereTask() {

        @Override
        public void onPostExecute(Document document) {
            // here you can access the document that is the result of our parse operation

            //document.getElementsByTagName(XYZ)...

        }

    };

    //This is the task we use to get stuff from the URL
    GetStuffFromUrlTask getStuffFromUrlTask = new GetStuffFromUrlTask() {

        @Override
        public void onPostExecute(String result) {
            //The task has completed, the string result contains the XML data we got from the URL
            parseTask.execute(result); //Now we start the task to parse the xml
        }

    };

    getStuffFromUrlTask.execute(URL);

    return rootView;
}

}