联网操作只能运行在工作线程中,你起一个Thread 或者使用AsyncTask都可以的。登录完成后,你可以使用Handler发消息给主线程去更新UI。

解决方案 »

  1.   

     if(validate()){
                        if(login()){
                            Intent intent = new Intent(MainActivity.this, MainOhterActivity.class);
                            startActivity(intent);
                        }else{
                            showDialog("用户名称或者密码错误,请重新输入!");
                        }Login()方法里面的 String result = query(username, pwd);这里的问题,
    建议:
    1,使用开源的网络访问框架,如:afinal  , volley 等
    2,自己封装一个网络访问机制的类
    3,若只为解决当前问题,创建子线程,将访问网络的这块放入其中便可
      

  2.   

    在你的activity的oncreate中,加入以下代码:
    int SDK_INT = android.os.Build.VERSION.SDK_INT;
    if (SDK_INT >= 11) {
    StrictMode
    .setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    .detectDiskReads().detectDiskWrites()
    .detectNetwork() // 这里可以替换为detectAll()
    // 就包括了磁盘读写和网络I/O
    .penaltyLog() // 打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
    .build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
    .detectLeakedSqlLiteObjects() // 探测SQLite数据库操作
    .penaltyLog() // 打印logcat
    .penaltyDeath().build());
    }当然,我还是不赞成用主线程做网络访问的。因为会导致UI界面卡死。
      

  3.   

    4.0以后不能在主线程访问网络,在一个新线程中访问
    new Thread()
    {
        public void run()
      {
            //访问网络
      }}.star();
      

  4.   


    我用了你说的volley框架,JsonObjectRequest这个东西是异步的啊,为什么要请求两次我的url地址呢
      

  5.   


    我用了你说的volley框架,JsonObjectRequest这个东西是异步的啊,为什么要请求两次我的url地址呢
    我的博客,你可以借鉴下:
    http://blog.csdn.net/gao_chun/article/details/34117083