解决方案 »

  1.   

    我想说的是
    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线程里面
      

  2.   

    //获得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函数已经返回了。
      

  3.   

    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();
    }
      

  4.   


    在这个类上声明了这个String变量,如果没有数据或者出错,返回给我的是个空字符串,在handler接收里进行了判断,如果是空字符串的话,就不更新ui
      

  5.   


    在这个类上声明了这个String变量,如果没有数据或者出错,返回给我的是个空字符串,在handler接收里进行了判断,如果是空字符串的话,就不更新ui
    run改成start后还报错吗?
      

  6.   

    run改成start后还报错吗?
    原因我已经找到了,原因是run要改成start 还有部分原因是因为在我的程序中,我错误的在调用层也使用了一个线程嵌套导致的。