Thursday, May 9, 2013

[android help] android.os.NetworkOnMainThreadException with a AsyncTask


I'm trying to connect a socket with Android. I know that you can't open network-connections from MainThread. I have created an AsyncTask to do it. I have created and private class inside of the main class, I have seen some examples on internet about that.


Could someone help me about what it's wrong?? I guess that it's a error in the way I'm trying to connect because I have connected to the server with a normal Java class. I have edited the manisfest to give the necessary permissions.


If someone has any advise about a better way to do it, it would be great.



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 {
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();
}
}
}

}


.

stackoverflow.comm

No comments:

Post a Comment

Google Voice on T-Mobile? [General]

Google Voice on T-Mobile? So I recently switched from a GNex on Verizon to a Moto X DE on T-Mobile. I had always used Google Voice for my v...