2012-05-10 12 views
0

まあ、Android 4.0ではUIスレッドでネットワーキングができません。 私は新しいスレッドを作った。Android 4.0ソケットの問題

public class NetThread extends Thread { 
    BukkitController bc; 
    Socket sock; 
    ObjectOutputStream outstream; 
    ObjectInputStream instream; 
    boolean loaded=false; 
    String ServerIP="192.168.123.103"; 
    String id="ssw"; 
    String pw="ssw"; 
    ArrayList<String> plist=new ArrayList<String>(); 
public void run(){ 
    try { 
     sock=new Socket(ServerIP,3560); 
     outstream=new ObjectOutputStream(sock.getOutputStream()); 
     instream=new ObjectInputStream(sock.getInputStream()); 
     //LOGIN 
     outstream.writeObject("SIGN "+id+" "+pw); 
    } catch (Exception e){} 
     Object tmp; 
     try{ 
     outstream.writeObject("PLIST"); 
     plist=(ArrayList<String>) instream.readObject(); 
     } catch (Exception e){ 
     } 


    loaded=true; 
    while(true){} 
} 
public void Write(String msg){ 
    try { 
     outstream.writeObject(msg); 
    } catch (Exception e){ 
    } 
} 

}

とUIスレッドで、Iは、オブジェクトを作った:

sock=new Socket(ServerIP,3560); 

m_nt=new NetThread(); 
m_nt.start(); 

LogCatでテストした後、私は、ソースがで停止することを見出しましたこれをどうすれば解決できますか? 私はエラーがなく、ただそこに凍結しました。

+1

をチェックするには、私が知っている例外 – santhu

答えて

0

HoneycombeのUIスレッドでネットワークIOを実行することはできません。技術的には、以前のバージョンのAndroidでも可能ですが、アプリの応答が停止する原因となり、OSが誤って動作しているためにアプリが強制終了することがあります。バックグラウンドプロセスを実行するか、AsyncTaskを使用してバックグラウンドスレッドでネットワークトランザクションを実行する必要があります。

についての記事はa linkです。これは、Android開発者向けサイトでの痛みのないスレッディングであり、ここで現実的に提供できるよりもはるかに深い答えが得られます。

+0

のログを投稿することができますので、私は「NetThread」という名前の別のスレッドを作った... – Namnamseo

+0

あなたはウルログを投稿することができます...... – santhu

+0

まあ、簡単な問題でした.DYNDNSの無料DNSサービスはうまくいきませんでした。あなたの応答に感謝します。 – Namnamseo

0

はこれを使用します。

try{ 
sock=new Socket(InetAddress.getByName(ServerIP),3560); 
//more here 
} 
catch {Exception e} 
{ 
Log.e("MyThread", "Error " + e.getMessage()); 
e.printStackTrace(); 
} 
+0

試しましたが、解決されなかった....ありがとう。 – Namnamseo

+0

あなたはそのIPとポートへのアクセス権を持っていないかもしれません。職場では私はネットワークの外でアクセスすることはできず、タイムアウト例外が発生します。この例外は2〜3分後に発生しました。たぶんこれがあなたの問題です。コマンドラインtelnet から、そのアドレスへのアクセス権があるかどうかを確認してください。 –

0

私はあなたのネットワークコードを処理するためのAsynctaskを使用することをお勧めします。 あなたのコードがちょうど止まるのは奇妙なことです。 サーバーが利用できない場合は、例外が発生します。 AsyncTasksにいくつかの追加情報については、

Android developer

+0

私はそれを試しましたが、それはまだそこで終わります。 – Namnamseo

+0

スレッドブロックはそこにありますか?それとも中断されますか? – Wottah

+0

まあ、それは単純な問題だった - 'DYNDNS'による無料のDNSサービスは動作しませんでした。あなたの応答に感謝します。 – Namnamseo