我已经介绍了SO的所有解决方案,以解决NetworkOnMainThreadException(包括异步类),但仍然存在一些问题
这是我的简单代码:
活动主类别:
public class MainActivity extends Activity
{
ArrayList<City> alCities = new ArrayList<City>();
Activity activity=null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity=this;
new MyTask(activity, alCities).execute(); //<--- running ASYNC here
}
}
MyTask类:
public class MyTask extends AsyncTask<Void, Void, ArrayList<City>>
{
ArrayList<City> alCities = null;
Activity ac = null;
public MyTask(Activity activity, ArrayList<City> al) //ctor
{
alCities = al;
this.activity= activity;
}
@Override
protected ArrayList<City> doInBackground(Void... params)
{
try
{
Object myJsonObject = Util.getJson("http://jsbin.com/lobel/2.js"); //internet job
try
{
//...fill array list...
return alCities;
} catch (Exception e)
{
...
}
}
} catch (Exception e)
{
...
}
return null;
}
protected void onPostExecute(ArrayList<City> alCities)
{
...
//update UI
ListView l1 = (ListView) ac.findViewById(R.id.list_view_1);
///
}
}
但仍然:
注意:
如果我把:
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
它确实有效:
问题
我做错了什么?
完整堆栈跟踪:http://jsbin.com/bilafi/2/edit
我所做的就是加载json文件!
onPostExecute的完整代码:
protected void onPostExecute(ArrayList<City> alCities)
{
CustomArrayAdapter adapter = new CustomArrayAdapter(ac, alCities);
ListView l1 = (ListView) ac.findViewById(R.id.list_view_1);
l1.setAdapter(adapter);
l1.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
// Util.Toast(getBaseContext(), "You have selected " + 1);
}
});
}
从完整堆栈跟踪中,错误源在
om.example.listview3. CustomArrayAdapter.getView()
尝试从URL加载位图
的位置
即com.example.listview3. Util.getBitmapFromURL(Util.java:179)
onPostExecute在主UI线程中运行,这就是为什么会出现NetworkOnMainThreadException
您可能需要考虑使用volley,它可以在okhttp之上工作,并提供易于使用的方法来加载图像而无需线程麻烦,它是在Google IO 2013中引入的
这就是您的崩溃所在:
at com.example.listview3.Util.getBitmapFromURL(Util.java:179)
at com.example.listview3.CustomArrayAdapter.getView(CustomArrayAdapter.java:67)
您已经正确使用了异步任务。然而,在填写列表时,您尝试再次使用网络获取图像。这一次,您没有使用异步任务,因此出现了NetworkOnMainThreadException。
问题内容: 我是学习Flask的Django开发人员。我对Flask中的工作方式还很陌生。访问时,我得到的404包含以下代码。有人可以解释为什么我得到这个: 在服务器上找不到请求的URL。如果你手动输入网址,请检查拼写,然后重试。 问题答案: 你在注册处理程序之前先打电话。你应该将整个块移到脚本的底部。
问题是什么?
我已经彻底研究了所有的问题,但没有一个直接适用于我的问题。我正在循环访问用户ID数组并匹配它们以从我的firestore DB中获得一个用户。我会毫无问题地返回结果,但当我将其存储在状态数组中并运行控制台日志时,我的状态数组总是空的。第一个console.log工作并显示DB的结果。 请帮帮忙。
本文向大家介绍python使用xpath中遇到: 到底是什么?,包括了python使用xpath中遇到: 到底是什么?的使用技巧和注意事项,需要的朋友参考一下 前言 大家在学习python爬虫的过程中,会发现一个问题,语法我看完了,说的也很详细,我也认真看了,爬虫还是不会写,或者没有思路,所以我的所有文章都会从实例的角度来解析一些常见的问题和报错。下面话不多说了,来一起看看详细的介绍吧。 Elem
我试图获取数据,但总是使用获取。