将网络访问放到另一个线程之后还是出现android.os.NetworkOnMainThreadException异常 网络thread异常线程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 新开一个子线程,把你有关网络操作的代码都放到子线程,android不允许网络操作放在主线程,因为这样会导致UI 卡死 问题可能出在listView.setAdapter(adapter)和Toast.makeText(MainActivity.this, "获取数据失败", Toast.LENGTH_LONG).show();中,你去掉试试看 楼主,你搞错了run 和startline 8,改成start就可以了。 run只是一个函数调用,所有的东西都是在原来的线程里完成的。而start才是开始一个新的线程。 去掉后还是android.os.NetworkOnMainThreadException异常而且如果我去掉,我的listview怎么显示数据呢。 用start的,而且子线程操作UI线程更新,估计你还要报错 start后app直接over了java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.java:200) 再创一个handler,把62-65和在handler里执行 你call stack贴贴全啊不过,我觉得你后面那个错是别的地方导致的 后面那个错应该是Toast.makeText(MainActivity.this, "获取数据失败", Toast.LENGTH_LONG).show();这个地方导致的吧 新版本在主线程中访问网络,就出这个错误,我也新建线程了,还是出这个错误,后面没有错,我单独拿出来,不出错,这段放到版本8里也没错我已经说了嘛,run只是个函数调用,你只是new一个Thread对像而已,但没有实际启动(start)了一个线程,并让这个线程执行你的任务。 好把,查资料说ansytask后面写的会很麻烦 注释后还是这样start是必须的,后面应该出来的是必须在main thread里才能update ui之类的错误 好把,查资料说ansytask后面写的会很麻烦关键是你要理解。代码比thread多个10行8行的吧也没复杂到什么地方去。。 版主说的对,而且你在子线程里还有刷新UI的动作,肯定会crash,你还是用handle和 sendmessage吧,这样就不会报错了 实际上也很简单的protected Long doInBackground() {写你下载的代码 protected void onPostExecute(Long result) 写你 62-66那段代码。这样子能完成你的目标,但代码丑了点其实最好是封装一下 实际上也很简单的protected Long doInBackground() {写你下载的代码 protected void onPostExecute(Long result) 写你 62-66那段代码。这样子能完成你的目标,但代码丑了点其实最好是封装一下onPostExecute里: JSONArray jsonArray = new JSONArray(result); Log.i(TAG1, "jsonArray:"+jsonArray); videos = new ArrayList<HashMap<String, Object>>();jsonArray有数据videos 为空 @Override protected void onPostExecute(String result) { Log.i(TAG1, "onPostExecute(Result result) called"); //textView.setText(result); Log.i(TAG1, "result:"+result); //提拱默认的HttpClient实现 try { JSONArray jsonArray = new JSONArray(result); Log.i(TAG1, "jsonArray:"+jsonArray); videos = new ArrayList<HashMap<String, Object>>(); for(int i = 0; i<jsonArray.length(); i++) { JSONObject jsonObject = (JSONObject) jsonArray.get(i); int id = jsonObject.getInt("id"); String name = jsonObject.getString("name"); String timelength = jsonObject.getString("Fbirthday"); String nongli = jsonObject.getString("nongli"); String haiyou = jsonObject.getString("haiyou"); video = new HashMap<String, Object>(); if(nongli.trim().equals("农历")) { video.put("ItemImage", R.drawable.lunar_icon);//图像资源的ID } else { video.put("ItemImage", R.drawable.solar_icon);//图像资源的ID } video.put("id", id); video.put("name", name); video.put("duoshaotian", haiyou+"天"); video.put("timelength", "生日:" + timelength+" "); videos.add(video); } SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, videos, R.layout.list_items, new String[]{"name", "timelength","duoshaotian","ItemImage"}, new int[]{R.id.ItemTitle, R.id.ItemText, R.id.dst,R.id.ItemImage} //dst多少天 ); listView.setAdapter(adapter); } catch(Exception e) { e.printStackTrace(); Log.e(TAG1, e.toString()); Toast.makeText(MainActivity.this, "获取数据失败", Toast.LENGTH_LONG).show(); //Intent intent = new Intent(user.this, user.class); //startActivity(intent); } }jsonArray有数据videos 为空 上面的找到原因了SimpleAdapter adapter = new SimpleAdapter(this, videos, R.layout.list_items, new String[]{"name", "timelength","duoshaotian","ItemImage"}, new int[]{R.id.ItemTitle, R.id.ItemText, R.id.dst,R.id.ItemImage} //dst多少天 );第一个参数this错了,该怎么写 播放HTTP大文件的问题 单击按钮,在屏幕上画一条直线 怎么禁用摄像头? 设置一个布局里的点击响应效果 Android开发 SlingMenu的使用无焦点问题 android button循环点击出现不同事件 Android failed to export application Fragment 怎么动态创建组件 请教,为何从桌面悬浮窗service启动activity要等待3秒钟? 请问下大佬这个可以实现吗,实现的话该怎么办》? 请问关于类加载器的问题。关于黑马程序员的天气解析。 求助 android怎么获取摄像头的状态
去掉后还是android.os.NetworkOnMainThreadException异常
而且如果我去掉,我的listview怎么显示数据呢。
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
不过,我觉得你后面那个错是别的地方导致的
注释后还是这样start是必须的,后面应该出来的是必须在main thread里才能update ui之类的错误
实际上也很简单的protected Long doInBackground() {写你下载的代码 protected void onPostExecute(Long result) 写你 62-66那段代码。这样子能完成你的目标,但代码丑了点其实最好是封装一下
实际上也很简单的protected Long doInBackground() {写你下载的代码 protected void onPostExecute(Long result) 写你 62-66那段代码。这样子能完成你的目标,但代码丑了点其实最好是封装一下onPostExecute里:
JSONArray jsonArray = new JSONArray(result);
Log.i(TAG1, "jsonArray:"+jsonArray);
videos = new ArrayList<HashMap<String, Object>>();
jsonArray有数据
videos 为空
protected void onPostExecute(String result) {
Log.i(TAG1, "onPostExecute(Result result) called");
//textView.setText(result);
Log.i(TAG1, "result:"+result);
//提拱默认的HttpClient实现
try {
JSONArray jsonArray = new JSONArray(result);
Log.i(TAG1, "jsonArray:"+jsonArray);
videos = new ArrayList<HashMap<String, Object>>();
for(int i = 0; i<jsonArray.length(); i++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
int id = jsonObject.getInt("id");
String name = jsonObject.getString("name");
String timelength = jsonObject.getString("Fbirthday");
String nongli = jsonObject.getString("nongli");
String haiyou = jsonObject.getString("haiyou");
video = new HashMap<String, Object>();
if(nongli.trim().equals("农历"))
{
video.put("ItemImage", R.drawable.lunar_icon);//图像资源的ID
}
else
{
video.put("ItemImage", R.drawable.solar_icon);//图像资源的ID
}
video.put("id", id);
video.put("name", name);
video.put("duoshaotian", haiyou+"天");
video.put("timelength", "生日:" + timelength+" ");
videos.add(video);
}
SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, videos, R.layout.list_items,
new String[]{"name", "timelength","duoshaotian","ItemImage"},
new int[]{R.id.ItemTitle, R.id.ItemText, R.id.dst,R.id.ItemImage} //dst多少天
);
listView.setAdapter(adapter);
} catch(Exception e) {
e.printStackTrace();
Log.e(TAG1, e.toString());
Toast.makeText(MainActivity.this, "获取数据失败", Toast.LENGTH_LONG).show();
//Intent intent = new Intent(user.this, user.class);
//startActivity(intent);
}
}jsonArray有数据
videos 为空
SimpleAdapter adapter = new SimpleAdapter(this, videos, R.layout.list_items,
new String[]{"name", "timelength","duoshaotian","ItemImage"},
new int[]{R.id.ItemTitle, R.id.ItemText, R.id.dst,R.id.ItemImage} //dst多少天
);第一个参数this错了,该怎么写