2012-12-03 83 views
2

我在使用AsyncTask時遇到了一些麻煩,因爲我以前從未遇到過它,並且不知道我在做什麼。使用AsyncTask進行android網絡連接

基本上我得到一個強制關閉,因爲我試圖在主類上運行連接。可能有人可能幫助我增加AsyncTask到代碼:

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; 
    } 

} 

回答

1

它migtht怎麼看起來像只是一個簡單的例子:

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

通過檢查文件建立here ..

你需要把創建連接部分在doInBackground ..然後在onPostExecute做任何你想要更新ui。