2012-09-09 13 views
0

我被警告不要在主線程上使用網絡操作。主線程上的NetworkConnection和驗證

但我有這樣的情況;

我需要檢查它是否在數據庫或不上不存在,

如果是的,我將進行另一次活動的價值。

但我正在採取例外。請幫助我解決這個 我更新的代碼

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.initial); 




    if(!isNetworkAvailable()) 
    { 
     final Dialog dialog = new Dialog(context); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.customlayoutnetconnection); 

     Button dialogButton = (Button) dialog.findViewById(R.id.Ok); 
     Button dialogButton2 = (Button) dialog.findViewById(R.id.OpenCon); 


     dialogButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       dialog.dismiss(); 
       finish(); 
      }}); 

     dialogButton2.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       ConnectivityManager manager = (ConnectivityManager)getSystemService(InitialActivity.CONNECTIVITY_SERVICE); 


       Boolean is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting(); 


       Boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting(); 

       if(is3g){ 
        Toast.makeText(context, "3G", Toast.LENGTH_LONG); 
       }else if(isWifi){ 
        Toast.makeText(context, "wifi", Toast.LENGTH_LONG); 
       }else{ 
        Toast.makeText(context, "nothing", Toast.LENGTH_LONG); 

        startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); 
       } 

      }}); 
     dialog.show(); 
    } 


    lost = (Button) findViewById(R.id.imlost); 
    lost.setOnClickListener(this); 

    looking = (Button) findViewById(R.id.imlookingfor); 
    looking.setOnClickListener(this); 

    about = (Button) findViewById(R.id.about); 
    about.setOnClickListener(this); 

    howto = (Button) findViewById(R.id.howto); 
    howto.setOnClickListener(this); 



} 




@Override 
public void onClick(View v) { 


    if(v==lost) 
    { 

     Intent i = new Intent(getApplicationContext(),IamLostActivity.class); 


     startActivity(i); 
    } 

    else if(v==looking) 
    { 
     final Dialog dialog = new Dialog(context); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.customlayout); 

     Button dialogButton = (Button) dialog.findViewById(R.id.Find); 

     code = (EditText) dialog.findViewById(R.id.codeToFind); 

     code.requestFocus(); 

     dialogButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       if(code.getText().toString().contentEquals("")) 
       { 

        final Dialog dialog2 = new Dialog(context); 
        dialog2.requestWindowFeature(Window.FEATURE_NO_TITLE); 
        dialog2.setContentView(R.layout.customlayoutinfo); 

        TextView tv = (TextView) dialog2.findViewById(R.id.customInfo); 

        tv.setText(context.getString(R.string.BlankField)); 

        Button dialogButton2 = (Button) dialog2.findViewById(R.id.Ok); 

        dialogButton2.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View v) { 

          dialog2.dismiss(); 

          } }); 
         dialog2.show(); 
       } 


       else 
       { 

        findFriend = new Runnable() { 
         @Override 
         public void run() { 

          httpclnt = new DefaultHttpClient(); 

          httppst = new HttpPost(url); 

          try { 

           nameValuePairs = new ArrayList<NameValuePair>(1); 
           nameValuePairs.add((new BasicNameValuePair("code", code.getText().toString()))); 

           httppst.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

           ResponseHandler<String> responseHandler = new BasicResponseHandler(); 

           response = httpclnt.execute(httppst, responseHandler); 

           //message = response; 
          } 
          catch (ClientProtocolException e) { 
           Toast.makeText(InitialActivity.this, "Client protocol exception ", Toast.LENGTH_LONG).show(); 
          } catch (IOException e) { 
           Toast.makeText(InitialActivity.this, "IO exception "+e.getMessage(), Toast.LENGTH_LONG).show(); 
          } 
         } 

        }; 

        Thread thread = new Thread(null, findFriend, "FindFriend"); 
        thread.start(); 

           if(response.contentEquals(",")) 
           { 


            final Dialog dialog4 = new Dialog(context); 
            dialog4.requestWindowFeature(Window.FEATURE_NO_TITLE); 
            dialog4.setContentView(R.layout.customlayoutinfo); 

            TextView tv = (TextView) dialog4.findViewById(R.id.customInfo); 

            tv.setText(context.getString(R.string.CheckCorrectness)); 

            Button dialogButton2 = (Button) dialog4.findViewById(R.id.Ok); 

            dialogButton2.setOnClickListener(new OnClickListener() { 
             @Override 
             public void onClick(View v) { 

              dialog4.dismiss(); 

              } }); 
             dialog4.show(); 
           } 
           else 
           { 
            Intent in = new Intent(getApplicationContext(),IamLookingForActivity.class); 

            in.putExtra("message", response.toString()); 

            startActivity(in); 
           } 

        }; 

}

  } 
     ); 



     Button dialogButton2 = (Button) dialog.findViewById(R.id.Cancel); 
     dialogButton2.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       dialog.dismiss(); 
      } 
     }); 
     dialog.show(); 
     } 

    else if(v==about) 
    { 
     final Dialog dialog = new Dialog(context); 
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      dialog.setContentView(R.layout.customlayoutabout); 

      ImageButton dialogButton = (ImageButton) dialog.findViewById(R.id.kodatolye); 

      Button dialogButton2 = (Button) dialog.findViewById(R.id.Back); 

      dialogButton.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        final Dialog dialog2 = new Dialog(context); 
        dialog2.requestWindowFeature(Window.FEATURE_NO_TITLE); 
        dialog2.setContentView(R.layout.customlayoutinfo); 

        TextView tv = (TextView) dialog2.findViewById(R.id.customInfo); 

        tv.setText("www.kodatolye.com"); 
        Button dialogButton3 = (Button) dialog2.findViewById(R.id.Ok); 


        dialogButton3.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View v) { 

          dialog2.dismiss(); 


          } }); 
        dialog2.show(); 

        } }); 

      dialogButton2.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        dialog.dismiss(); 

        } }); 
       dialog.show(); 

    } 
    else if(v==howto) 
    { 


     final Dialog dialog2 = new Dialog(context); 
     dialog2.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog2.setContentView(R.layout.customlayouthowto); 


     Button dialogButton3 = (Button) dialog2.findViewById(R.id.Back); 



     dialogButton3.setOnClickListener(new OnClickListener() { 
      @Override 
     public void onClick(View v) { 

       dialog2.dismiss(); 

      } }); 
     dialog2.show(); 

    } 
} 



} 
+0

您可以編輯您的帖子向我們展示異常的LogCat輸出嗎? – Eric

回答

1

你不能執行主線程網絡代碼。同樣,你不能嘗試從任何東西其他比主線程更新UI。您(正確)爲聯網操作啓動單獨的線程,但您並未等待它完成。您應該將啓動if(response.contentEquals(...))的代碼移動到Runnable中,直到聯網活動完成並且您有響應才運行。然後,您可以通過處理程序將Runnable發佈到主線程以啓動新的活動(或根據需要顯示錯誤消息)。您可能想要顯示一個對話框,告訴用戶在啓動網絡線程之前等待。

AsyncTask爲您做了大部分簿記工作,使其更容易一些。有關更多信息,請參閱博客文章Painless Threading

+0

如果我移動if(response ....再次,我正在採取例外 我只是想驗證它的值是否存在,它會返回一個值作爲響應,並會通知用戶 – erdemgc

+0

@erdemgc - 您必須組織代碼在接收到響應之前,if(response ...)代碼被阻止執行,代碼本身必須在主線程中運行,請發佈更新後的代碼並解釋你所看到的異常。 –

+0

我的更新代碼在我的第一篇文章是 – erdemgc