Using AsyncTask for android network connection
19,291
Solution 1
Just one quick example of how it migtht look like:
public class IPControl extends Activity {
private ProgressDialog pd = null;
private String data = null;
private Socket socket;
private String serverIpAddress;
private static final int REDIRECTED_SERVERPORT = 32;
public PrintWriter out;
public BufferedReader in ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try{
this.pd = ProgressDialog.show(this, "Loading..", "Please Wait...", true, false);
new AsyncAction().execute();
}catch (Exception e) {
e.printStackTrace();
}
}
private class AsyncAction extends AsyncTask<String, Void, String> {
protected Void doInBackground(String... args) {
try {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
socket = new Socket(serverAddr, REDIRECTED_SERVERPORT);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (! in.ready());
readBuffer();
out.println("root\r\n");
//System.out.print("root\r\n");
while (! in .ready());
readBuffer();
out.println("root\r\n");
//System.out.print("root\r\n");
while (! in .ready());
String msg = "";
while (in.ready()) {
msg = msg + (char) in .read();
}
} catch (IOException e) {}
return null;//returns what you want to pass to the onPostExecute()
}
protected void onPostExecute(String result) {
//resultis the data returned from doInbackground
IPControl.this.data = result;
if (IPControl.this.pd != null) {
IPControl.this.pd.dismiss();
}
}
}
Solution 2
Go through this simple tutorial to get a good grounding on what an AsyncTask is and how to use it:
https://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/
Then try modifying your code to use async tasks. If you get problems, Just come back here :-)
Related videos on Youtube
Author by
Chris James Hancocks
Updated on September 16, 2022Comments
-
Chris James Hancocks over 1 year
I am having some trouble using
AsyncTask
as I have never come across it before and have no clue what I am doing with it.Basically I am getting a force close because I am trying to run the connection on a main class. Could someone possibly help me with adding
AsyncTask
into the code:package com.smarte.smartipcontrol; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class IPControl extends Activity { private Socket socket; private String serverIpAddress; private static final int REDIRECTED_SERVERPORT = 32; public PrintWriter out; public BufferedReader in ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get the message from the intent Intent intent = getIntent(); serverIpAddress = intent.getStringExtra(IPEntry.ACTUALSMARTIP); createConnection(); } public void getModel(View view) { try { out.println("[m\r\n"); //System.out.print("root\r\n"); while (! in .ready()); String textStatus = readBuffer(); } catch (IOException e) {} } public void createConnection() { try { InetAddress serverAddr = InetAddress.getByName(serverIpAddress); socket = new Socket(serverAddr, REDIRECTED_SERVERPORT); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } try { out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); while (! in .ready()); readBuffer(); out.println("root\r\n"); //System.out.print("root\r\n"); while (! in .ready()); readBuffer(); out.println("root\r\n"); //System.out.print("root\r\n"); while (! in .ready()); readBuffer(); } catch (IOException e) {} //R.id.textStatus } private String readBuffer() throws IOException { String msg = ""; while ( in .ready()) { msg = msg + (char) in .read(); } //System.out.print(msg); if (msg.indexOf("SNX_COM> ") != -1) return msg.substring(0, msg.indexOf("SNX_COM> ")); else return msg; } }
-
Chris James Hancocks over 11 yearsThanks Anup, I will give it my best shot :)