解决方案 »

  1.   

    新开一个子线程,把你有关网络操作的代码都放到子线程,android不允许网络操作放在主线程,因为这样会导致UI 卡死
      

  2.   

    问题可能出在listView.setAdapter(adapter)和Toast.makeText(MainActivity.this, "获取数据失败", Toast.LENGTH_LONG).show();中,你去掉试试看
      

  3.   

    楼主,你搞错了run 和startline 8,改成start就可以了。
      

  4.   

    run只是一个函数调用,所有的东西都是在原来的线程里完成的。而start才是开始一个新的线程。
      

  5.   


    去掉后还是android.os.NetworkOnMainThreadException异常
    而且如果我去掉,我的listview怎么显示数据呢。
      

  6.   

    用start的,而且子线程操作UI线程更新,估计你还要报错
      

  7.   

    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)
      

  8.   

    再创一个handler,把62-65和在handler里执行
      

  9.   

    你call stack贴贴全啊
    不过,我觉得你后面那个错是别的地方导致的
      

  10.   

    后面那个错应该是Toast.makeText(MainActivity.this, "获取数据失败", Toast.LENGTH_LONG).show();这个地方导致的吧
      

  11.   

    新版本在主线程中访问网络,就出这个错误,我也新建线程了,还是出这个错误,后面没有错,我单独拿出来,不出错,这段放到版本8里也没错我已经说了嘛,run只是个函数调用,你只是new一个Thread对像而已,但没有实际启动(start)了一个线程,并让这个线程执行你的任务。
      

  12.   

    好把,查资料说ansytask后面写的会很麻烦
      

  13.   


    注释后还是这样start是必须的,后面应该出来的是必须在main thread里才能update ui之类的错误
      

  14.   

    好把,查资料说ansytask后面写的会很麻烦关键是你要理解。代码比thread多个10行8行的吧也没复杂到什么地方去。。
      

  15.   

    版主说的对,而且你在子线程里还有刷新UI的动作,肯定会crash,你还是用handle和 sendmessage吧,这样就不会报错了
      

  16.   


    实际上也很简单的protected Long doInBackground() {写你下载的代码 protected void onPostExecute(Long result) 写你 62-66那段代码。这样子能完成你的目标,但代码丑了点其实最好是封装一下
      

  17.   


    实际上也很简单的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 为空
      

  18.   

    @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 为空
      

  19.   

    上面的找到原因了
    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错了,该怎么写