2016-06-13 5 views
2

Androidスタジオでデータを送信しようとしています。私はログイン機能を作っています。だから私はWebサーバーにデータを送信する必要があります。このエラーのため、私はすでにWebサーバを作ったが、私はできません:私はそのエラーがこの行で指摘されたと思いますandroid.os.NetworkOnMainThreadExceptionAndroidでWebServerにデータを送信するにはどうすればよいですか?

:によって引き起こさ

InputStream is = conn.getInputStream(); 

私は3日間苦労している。助けてください。

public class MainActivity extends AppCompatActivity { 
     EditText id; 
     EditText pass; 
     String custid; 
     String password; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     id=(EditText)findViewById(R.id.idtext); 
     pass=(EditText)findViewById(R.id.passtext); 

    } 

    public void ButtonClick(View view){ 

     custid=id.getText().toString(); 
     password=pass.getText().toString(); 
     Toast.makeText(this, "버튼접근."+custid+password, Toast.LENGTH_SHORT).show(); 
     Properties prop = new Properties(); 
     prop.setProperty("custid", custid); 
     prop.setProperty("password", password); 
     String encodedString = encodeString(prop); 

     URL url = null; 
     try { 
      url = new URL ("http://192.168.56.1:9999/SEBank/customer/login.action" + "?" + encodedString); 
      URLConnection conn = url.openConnection(); 
      conn.setUseCaches(false); 
      InputStream is = conn.getInputStream(); 
      BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
      char[] buff = new char[512]; 
      int len = -1; 

      while((len = br.read(buff)) != -1) { 
       System.out.print(new String(buff, 0, len)); 
      } 

      br.close(); 
     } catch (java.io.IOException e) { 
      e.printStackTrace(); 
     } 

    } 


    public String encodeString(Properties params) { 
     StringBuffer sb = new StringBuffer(256); 
     Enumeration names = params.propertyNames(); 

     while (names.hasMoreElements()) { 
      String name = (String) names.nextElement(); 
      String value = params.getProperty(name); 
      sb.append(URLEncoder.encode(name) + "=" + URLEncoder.encode(value)); 

      if (names.hasMoreElements()) sb.append("&"); 
     } 
     return sb.toString(); 
    } 

} 

答えて

2

あなたはあなたのコードでこれを置くことができる

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

しかし、私は最高のソリューションは、AsyncTasksまたはVolleyを使用していると思う

+0

wowありがとう多くの場合 私はあなたに感謝しました。 AsyncTasksの使い方を教えてください!ありがとう – prepare123

1

エラーが "android.os.NetworkOnMainThreadException ..." である場合は、以下を使用してコードを同封してみてくださいは、スニペット:

AsyncTask.execute(new Runnable() { 
     @Override 
     public void run() { 
      InputStream is = conn.getInputStream(); 
      // other code 
     } 
    }); 
+0

ありがとうございました!エラーメッセージが変更されました!原因:android.os.NetworkOnMainThreadException .... :(その.....同じ行を指しているInputStreamは= conn.getInputStream(); – prepare123

+0

@ prepare123、答えが更新されました。 – David

+0

ありがとうデビッド!私は今、そのコードを使用することに失敗しました。今、私はRunnable()匿名オブジェクトに 'URLConnection conn Object'を送信しようとしています! – prepare123

関連する問題