0

このクラスは私に android.os.NetworkOnMainThreadException を引き起こします。私は asyncTask を使用してそれを作成する必要があることを知っていますが、1 つのフラグメントを使用しているため、特にビットマップをロードするときにアプリケーションが非常に遅くなるため、方法がわかりません。助けてください。

public class ContainerData {    

static public Context context;

public ContainerData() {

}


public static ArrayList<Feed> getFeeds(String feedurl){
    SAXParserFactory fabrique = SAXParserFactory.newInstance();
    SAXParser parseur = null;
    ArrayList<Feed> feeds = null;
    try {
        parseur = fabrique.newSAXParser();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    }
    URL url = null;
    try {
        url = new URL(feedurl);
    } catch (MalformedURLException e1) {
        e1.printStackTrace();
    }

    DefaultHandler handler = new ParserXMLHandler();
    try {
        parseur.parse(url.openConnection().getInputStream(), handler);

        feeds = ((ParserXMLHandler) handler).getData();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return feeds;
}

}
4

2 に答える 2

0

使用する場合は、コールバック内で呼び出されるAsyncTaskことを確認してくださいgetFeedsdoInBackground(...)

于 2012-10-16T14:31:37.067 に答える
0

フラグメントを使用するかどうかに関係なく、メイン スレッドでネットワーク アクティビティを実行しようとしています。

AsyncTaskすべての解析を実行できる、拡張するジェネリック クラスを作成します。

public class MyTaskHandler extends AsyncTask<String, Integer, Boolean>
{

@Override
protected void onPreExecute() 
{
   //Could display progress dialog here
}

@Override
protected Boolean doInBackground(String... params) 
{
   //Implement your parser here
}

@Override
protected void onPostExecute(Boolean result) 
{
   //Check result, dismiss dialog etc
}
}

次に、新しいインスタンスを作成してMyTaskHandler実行します...

MyTaskHandler myTask = new MyTaskHandler();
myTask.execute("http://www.myxmlsite.com/lists.xml");

execute メソッドは取る(String... params)ことができるので、たとえば URL を渡し、それを取得することができますdoInBackground(String... params)

@Override
protected Boolean doInBackground(String... params) 
{
   //Implement your parser here
   String urlToParse = params[0];
}

幸運を祈ります。

于 2012-10-16T15:08:54.490 に答える