Android 即使我使用线程,我也会得到NetworkOnMainThreadException

Android 即使我使用线程,我也会得到NetworkOnMainThreadException,android,Android,我有一个活动,它加载两个自动完成小部件,其中包含来自远程数据库的数据。我在单独的线程中运行这两个操作,但我不知道为什么仍然会出错。您可以在此链接查看我的代码。请粘贴handleSuccess()、handleProductSuccess()和handleException()方法代码。请检查行号51。我认为语句'products=getConnection().getProducts();'这可能是原因。那条线路是否尝试建立任何网络连接?此语句在主线程中执行,如果它访问网络,则这应该是excep

我有一个活动,它加载两个自动完成小部件,其中包含来自远程数据库的数据。我在单独的线程中运行这两个操作,但我不知道为什么仍然会出错。您可以在此链接查看我的代码。

请粘贴handleSuccess()、handleProductSuccess()和handleException()方法代码。请检查行号51。我认为语句'products=getConnection().getProducts();'这可能是原因。那条线路是否尝试建立任何网络连接?此语句在主线程中执行,如果它访问网络,则这应该是exception@sandyiscool是的,你是对的。但是现在它没有加载数据。我所做的是删除这两行并将其放入loadSupplier()方法中。我得多挖一些,看看为什么没有加载。有什么线索可以告诉我该怎么做<代码>产品=getConnection().getProducts()
BaseKaizenActivity.getStorageManager().setProducts(产品)我不确定,因为我看不到“产品”在哪里声明。它可能是从父活动“BaseKaizenActivity”继承的公共属性。无论如何,我猜“loadsuppliers()”不是获取和存储产品的合适方法。如果将第94行替换为以下两条语句:“allProducts=getConnection().getProducts();BaseKaizenActivity.getStorageManager().setProducts(products);'?这样,您就可以将产品加载到“allProducts”中,并存储在“storage manager”正在管理的存储器中。我说得对吗?另一个观察结果是:在第47-61行中,您经常使用“BaseKaizenActivity.getStorageManager()”和“BaseKaizenActivity.getStorageManager().getSuppliers()”。您可以尝试将它们放入单独的对象中,这样就不必多次调用相同的方法。这将使您的代码更有效率。另外,如果上面的方法是密集型的,那么我建议您以适当的方式重构代码,并将它们卸载到单独的线程中。