2014-05-18 25 views
0

我是android和Java的新手。我試圖開發一個非常簡單的UDP服務器作爲我的第一個Android應用程序(第二個如果考慮Hello World!)。 我已經收集了從網上的代碼,這就是結果:瞭解android UDP服務器應用代碼

package com.example.androidsocketserver; 


import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import android.app.Activity; 
import android.widget.TextView; 


public class MainActivity extends Activity { 

public void updateTextView(String toThis) { 

    TextView textView = (TextView) findViewById(android.R.id.text2); 
    textView.setText(toThis); 

    } 

private MyDatagramReceiver myDatagramReceiver = null; 

protected void onResume() { 
    myDatagramReceiver = new MyDatagramReceiver(); 
    myDatagramReceiver.start(); 
} 

protected void onPause() { 
    myDatagramReceiver.kill(); 
} 

private class MyDatagramReceiver extends Thread { 
    private boolean bKeepRunning = true; 


    public void run() { 
     String message; 
     byte[] lmessage = new byte[200]; 
     DatagramPacket packet = new DatagramPacket(lmessage, lmessage.length); 

     try { 
      DatagramSocket socket = new DatagramSocket(2500); 


      while(bKeepRunning) { 
       socket.receive(packet); 
       message = new String(lmessage, 0, packet.getLength());     
       if (message != null) { 
        updateTextView(message); 
        message = null; 
       }  
      } 
      if (socket != null) { 
       socket.close(); 
      } 
     } catch (Throwable e) { 
      e.printStackTrace(); 
     } 


    } 

    public void kill() { 
     bKeepRunning = false; 
    } 


} 
} 

不幸的是,應用程序,一旦我啓動它停止了,但我不明白爲什麼。
有沒有人如此善良的幫助我理解我錯過的東西。我試着用模擬器和真正的設備獲得相同的結果。

謝謝大家提前。

+0

在你的問題中添加堆棧跟蹤。 – vjdhama

+0

對不起,但隨着我發佈的代碼,我沒有在Logcat中的消息(我的意思是e.printStackTrace()指令沒有執行,即在運行方法中沒有發現異常)。我相信關閉應用程序的例外發生在「run」的調用之前,但我不知道在哪裏放置staketrace指令。你能建議我嗎?謝謝 – user3650190

回答

0

內部消除錯誤是很難知道,我們是錯,但嘗試改變您的接收器類異步任務

public class ReceiverBroadcastAsyncTask extends AsyncTask<Void, Integer ,String > { 
boolean running = true; 
Context context; 
//public int counter = 1; 
public ReceiverBroadcastAsyncTask(Context context) { 
    this.context = context.getApplicationContext(); 
} 

@Override 
protected String doInBackground(Void... params) { 
/////HERE YOUR CODE 
} 
protected void onPostExecute(String result) { 
    //do whatever...nothing is required just pass a result on finish 
} 
protected void onProgressUpdate(Integer... Progress) 
{ 
///you can pass data on here on the task progress to inform about the status 
} 
} 

從你的活動,你可以打電話給你的異步任務這樣

new ReceiverBroadcastAsyncTask(this).execute(); ///this refers to context