2017-01-19 7 views
0

私が作ったPythonサーバーと接続しようとしていますが、毎回ボタンを押したときにアプリがクラッシュします。ここで ソケットでアプリケーションがクラッシュする

が私のコードです:

MainActivity.java

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button button = (Button)findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String ip = "<IP>"; 
      int port = <PORT>; 

      try { 
       Socket s = new Socket(ip, port); 
       System.out.println("connected!"); 
       s.close(); 
      } catch (IOException e) { 
       System.out.println(e); 
      } 

     } 
    }); 
} 
} 

のAndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

私は実際に行ってきましたか理解していない、間違った

+4

をお使いのエラーログ、別のスレッドに –

+3

移動ソケット接続を追加してください、あなたはメインスレッドでのネットワーク実行することはできません。将来的に - あなたのlogcatログを投稿してください。また、あなたに他の問題がないと確信していません。 –

+1

あなたは 'NetworkOnMainThreadException'を持っています。 logcatにはっきりと見える!それを探してください。 – greenapps

答えて

3

許可されていないメインUIスレッドでネットワークを実行しています。したがって、非同期タスクを使用し、バックグラウンドスレッドでこのタスクを実行します。そのためには、クラス(例:background.java)を作成し、その中に非同期タスクを使用します。

Button button = (Button)findViewById(R.id.button); 
button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     background bg = new background(); 
     bg.execute(); 

    } 
}); 

とバックグラウンドクラスで:

public class background extends AsyncTask<Void,Void,Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 

     String ip = "<IP>"; 
     int port = <PORT>; 

     try { 
      Socket s = new Socket(ip, port); 
      System.out.println("connected!"); 
      s.close(); 
     } catch (IOException e) { 
      System.out.println(e); 
     } 
     return null; 
    } 
} 

・ホープ、このことができます:)

関連する問題