Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中使用thead类_Android_Multithreading - Fatal编程技术网

如何在android中使用thead类

如何在android中使用thead类,android,multithreading,Android,Multithreading,我正在进行一个项目,使用Android应用程序打开LED,并将与Wi-Fi通信 问题是,当我按下按钮将指令发送到远程设备(我使用的是Arduino+wifi屏蔽)时,应用程序总是崩溃。我认为问题在于我对线程的构造和执行。有人能解决我的问题吗?如何在android中正确使用thread类 这是我的thread类代码 package com.gfhz.appliancecontrol; import java.io.DataOutputStream; import java.io.IOExcept

我正在进行一个项目,使用Android应用程序打开LED,并将与Wi-Fi通信

问题是,当我按下按钮将指令发送到远程设备(我使用的是Arduino+wifi屏蔽)时,应用程序总是崩溃。我认为问题在于我对线程的构造和执行。有人能解决我的问题吗?如何在android中正确使用thread类

这是我的thread类代码

package com.gfhz.appliancecontrol;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import android.widget.Toast;

public class ConnectionSocket extends Thread {

    Socket client;
    ConnectionInfoActivity conInfo;
    String instructionCode;
    String serverAddr;
    OutputStream os;
    DataOutputStream dos;
    String stoast;

    final int port = 2000;

    ConnectionSocket(String instruction) {
        // Get the DEVICE ID
        String devId = conInfo.getDevId();
        // Concatenate instruction message and device Id
        instructionCode = devId.concat(instruction);

        // Get the SERVER IP ADDRESS
        serverAddr = "192.168.1.105";
    }

    @Override
    public void run() {
        //android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);          
        try{
            // Open a socket
            client = new Socket(serverAddr, port);

            dos = new DataOutputStream(client.getOutputStream());
            dos.writeBytes(instructionCode);
        } catch (UnknownHostException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
            stoast = "Unknown Host Exception" + e.toString();
        } catch (IOException e) {
            // TODO Auto-generated cach block
            e.printStackTrace();
            // Display in TOAST
            stoast = "IO Exception" + e.toString();
        } finally {
            if (client != null) {
                try {
                    client.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //Toast.makeText(getTContext(), stoast, Toast.LENGTH_SHORT).show();
        }
    }

}
这里是执行线程的代码

package com.gfhz.appliancecontrol;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class LightsMenuActivity extends MainActivity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.display_lights_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void powerLamp1 (View view) {
        Thread cs = new ConnectionSocket("0401");
        cs.start();
    }
    public void powerLamp2(View view) {
        Thread cs = new ConnectionSocket("0402");
        cs.start();
    }
    public void powerLamp3(View view){
        Thread cs = new ConnectionSocket("0403");
        cs.start();
    }
}
logcat错误:

11-16 19:49:21.127: E/AndroidRuntime(7457): FATAL EXCEPTION: main
11-16 19:49:21.127: E/AndroidRuntime(7457): java.lang.IllegalStateException: Could not execute method of the activity
11-16 19:49:21.127: E/AndroidRuntime(7457):     at android.view.View$1.onClick(View.java:2154)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at android.view.View.performClick(View.java:2538)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at android.view.View$PerformClick.run(View.java:9152)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at android.os.Handler.handleCallback(Handler.java:587)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at android.os.Looper.loop(Looper.java:130)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at android.app.ActivityThread.main(ActivityThread.java:3693)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at java.lang.reflect.Method.invokeNative(Native Method)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at java.lang.reflect.Method.invoke(Method.java:507)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at dalvik.system.NativeStart.main(Native Method)
11-16 19:49:21.127: E/AndroidRuntime(7457): Caused by: java.lang.reflect.InvocationTargetException
11-16 19:49:21.127: E/AndroidRuntime(7457):     at java.lang.reflect.Method.invokeNative(Native Method)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at java.lang.reflect.Method.invoke(Method.java:507)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at android.view.View$1.onClick(View.java:2149)
11-16 19:49:21.127: E/AndroidRuntime(7457):     ... 11 more
11-16 19:49:21.127: E/AndroidRuntime(7457): Caused by: java.lang.NullPointerException
11-16 19:49:21.127: E/AndroidRuntime(7457):     at com.gfhz.appliancecontrol.ConnectionSocket.<init>(ConnectionSocket.java:25)
11-16 19:49:21.127: E/AndroidRuntime(7457):     at com.gfhz.appliancecontrol.LightsMenuActivity.powerLamp1(LightsMenuActivity.java:37)
11-16 19:49:21.127: E/AndroidRuntime(7457):     ... 14 more

logcat显示ConnectionSocket类的第25行存在NullPointerException

这就是应用程序崩溃的原因

除此之外,我建议您研究Android特定的后台线程实现,例如AsyncTask


它们比原始线程类更容易使用。

请显示logcat崩溃信息。@RichardLeMesurier我添加了错误logcat,先生