簡體   English   中英

如何在Android API 25中進行套接字/線程

[英]How to Socket/Thread in Android API 25

我在API 25中遇到了套接字和線程問題。我在使用7.1.1的Nexus 6p上直接定位了API 25

嘗試與端口8124上的節點服務器通信時,我初始化了一個新線程並初始化了一個套接字,但是我在mainthreadexception上得到了一個網絡

public class MainActivity extends AppCompatActivity {

private Socket socket;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(policy);

    Button LoginButton = (Button) findViewById(R.id.button2);
    LoginButton.setOnClickListener(
            new View.OnClickListener(){
                @Override
                public void onClick(View v){
                    TryLogin(v);
                }
            }
    );
}

public void TryLogin(View v){
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                socket = new Socket("192.168.1.57", 8124);
                Log.i("SOCKET", "Was the thread started?");
            } catch(UnknownHostException e1){

            } catch (IOException e1){

            }
        }
    }).start();
}

}

當我調用start()時,我從沒看到“線程是否啟動了?”。 logcat中也不會拋出任何錯誤。 但是,當我更改為run()時,出現networkonmainthreadexception錯誤。 好像發生了什么變化一樣縫起來。 我已經驗證了使用節點客戶端顯示到我的節點服務器的tcp連接。

當應用程序嘗試在主線程中執行聯網操作時,將引發此異常。 onViewCreated使用以下代碼可以避免此錯誤,否則請對網絡調用使用AsynkTask。

  if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
            }

當您獲得networkonmainthreadexception時,這意味着您的線程已正確啟動,並且未打印出Log.i的唯一原因是因為在打印之前引發了錯誤。 像這樣將您的Log.i移動到套接字代碼上方,您會看到它正在打印:

Log.i("SOCKET", "Was the thread started?");
socket = new Socket("192.168.1.57", 8124);

現在知道您的線程已正確啟動,您可以專注於主要問題networkmainthreadexception。

幸運的是,該問題的答案在這里: 如何修復android.os.NetworkOnMainThreadException?

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM