请求网络接口出错:android.os.NetworkOnMainThreadException Android 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想说的是public String GetJSonData() { new Thread(new Runnable() { @Override public void run() { //访问本地,查看缓存文件是否存在 if(isExist(dirString,filenameString)){ /*查询本地的方法体*/ datastr=GetJsonCache(); } else { datastr=GetJsonHTTP(); } } }).run(); return datastr; }这个函数写得有问题,你确定return datastr;会是你想要的吗?还有看下GetJsonHTTP()函数是否有在其他地方调用UI线程里面 //获得Json数据字符串 public String GetJSonData() { new Thread(new Runnable() { @Override public void run() { //访问本地,查看缓存文件是否存在 if(isExist(dirString,filenameString)){ /*查询本地的方法体*/ datastr=GetJsonCache(); } else { datastr=GetJsonHTTP(); } } }).start(); return datastr; }把run改成start但是你这个函数GetJSonData还是有问题的,返回的是null,因为子线程还在执行,datastr还没有来得及被赋值,GetJSonData函数已经返回了。 public String GetJSonData() { new Thread(new Runnable() { @Override public void run() { // 访问本地,查看缓存文件是否存在 if (isExist(dirString, filenameString)) { /* 查询本地的方法体 */ datastr = GetJsonCache(); handler.sendMessage(handler.obtainMessage(xxx,datastr)); } else { datastr = GetJsonHTTP(); handler.sendMessage(handler.obtainMessage(xxx,datastr)); } } }).start(); } 在这个类上声明了这个String变量,如果没有数据或者出错,返回给我的是个空字符串,在handler接收里进行了判断,如果是空字符串的话,就不更新ui 在这个类上声明了这个String变量,如果没有数据或者出错,返回给我的是个空字符串,在handler接收里进行了判断,如果是空字符串的话,就不更新uirun改成start后还报错吗? run改成start后还报错吗?原因我已经找到了,原因是run要改成start 还有部分原因是因为在我的程序中,我错误的在调用层也使用了一个线程嵌套导致的。 请教一个关于android ui的样式 android:build path contains duplicate entry:'src' for project 'XXX' 线程问题 请问为什么我的代码只运行一次? android 与pc socket 通信问题 关于android版本代码拷贝问题 如何定义全局变量 一个 Activity 加了 Logger 以后,Logger 总是为空,怎么回事呢 一个模仿fuubo新浪微博的客户端,发送源码 H5嵌入到第三方app里面使用拍照功能 adb shell 中am start问题求教,请进!! 新手,Android打开SQLite问题
public String GetJSonData() {
new Thread(new Runnable() {
@Override
public void run() {
//访问本地,查看缓存文件是否存在
if(isExist(dirString,filenameString)){
/*查询本地的方法体*/
datastr=GetJsonCache();
}
else {
datastr=GetJsonHTTP();
}
}
}).run();
return datastr;
}
这个函数写得有问题,你确定return datastr;会是你想要的吗?还有看下GetJsonHTTP()函数是否有在其他地方调用UI线程里面
public String GetJSonData() {
new Thread(new Runnable() {
@Override
public void run() {
//访问本地,查看缓存文件是否存在
if(isExist(dirString,filenameString)){
/*查询本地的方法体*/
datastr=GetJsonCache();
}
else {
datastr=GetJsonHTTP();
}
}
}).start();
return datastr;
}把run改成start
但是你这个函数GetJSonData还是有问题的,返回的是null,因为子线程还在执行,datastr还没有来得及被赋值,GetJSonData函数已经返回了。
new Thread(new Runnable() {
@Override
public void run() {
// 访问本地,查看缓存文件是否存在
if (isExist(dirString, filenameString)) {
/* 查询本地的方法体 */
datastr = GetJsonCache();
handler.sendMessage(handler.obtainMessage(xxx,datastr));
} else {
datastr = GetJsonHTTP();
handler.sendMessage(handler.obtainMessage(xxx,datastr));
}
}
}).start();
}
在这个类上声明了这个String变量,如果没有数据或者出错,返回给我的是个空字符串,在handler接收里进行了判断,如果是空字符串的话,就不更新ui
在这个类上声明了这个String变量,如果没有数据或者出错,返回给我的是个空字符串,在handler接收里进行了判断,如果是空字符串的话,就不更新ui
run改成start后还报错吗?
原因我已经找到了,原因是run要改成start 还有部分原因是因为在我的程序中,我错误的在调用层也使用了一个线程嵌套导致的。