我試圖用Android連接套接字。我知道你不能從MainThread打開網絡連接。我創建了一個AsyncTask來完成它。我在主類中創建了私有類,我在網上看到了一些關於這個類的例子。android.os.NetworkOnMainThreadException AsyncTask
有人可以幫我瞭解它是什麼錯?我想這是我試圖連接的方式的一個錯誤,因爲我已經使用普通的Java類連接到服務器。 我編輯了manisfest以提供必要的權限。
如果有人對更好的方法有任何建議,那就太好了。
public class MainActivity extends Activity {
private ObjectInputStream input;
private ObjectOutputStream output;
private Button buttonCreateRoom;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonCreateRoom = (Button)findViewById(R.id.buttonCreate);
//buttons
buttonCreateRoom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onClickButton(ConstantsRooms.CREATE_ROOM);
}
});
}
private void onClickButton(int numberButton){
RequestMessage request = null;
switch (numberButton) {
....
}
AsyncButtons asyncButtons = new AsyncButtons();
asyncButtons.execute(request);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
//Botones
private class AsyncButtons extends AsyncTask<RequestMessage, ResponseMessage, Void> {
private Socket socket;
@Override
protected Void doInBackground(RequestMessage... params) {
RequestMessage request;
ResponseMessage response;
Void v = null;
try{
request = params[0];
output.writeObject(request);
output.flush();
response = (ResponseMessage)input.readObject();
...
}
@Override
protected void onPreExecute() {
try{
// Setup networking
**socket = new Socket(ConstantsRooms.SERVER_ADDRESS, ConstantsRooms.PORT_PUBLIC); -->ERROR**
socket.setTcpNoDelay(true);
output = new ObjectOutputStream(socket.getOutputStream());
output.flush();
input = new ObjectInputStream(socket.getInputStream());
}catch (Exception exp){
Log.e(TAG, "Excepcion socket ---");
exp.printStackTrace();
}
}
}
}
謝謝,它的工作。 – Guille 2013-05-09 10:09:44