我可以在扩展Thread的类中使用ArrayList吗?

ala*_*and 0 java android arraylist

是否可以ArrayList在扩展的类中使用Thread?我已经写了一些代码来从蓝牙序列中读取它正在工作,但我添加了一个ArrayList跟踪我正在阅读的内容.但是,我正在NullPointException访问任何访问结果的行.我知道这ArrayList不是线程安全的(虽然我可能不完全理解这意味着什么)所以我可能会尝试做不可能的事情,但我想我会与专家核实,因为ArrayLists非常容易使用.

private class ConnectedThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final InputStream mmInStream;
    private List<String> results;

    public ConnectedThread(BluetoothSocket socket) {
        Log.d(TAG, "create ConnectedThread");
        mmSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;
        List<String> results = new ArrayList<String>();

        // Get the BluetoothSocket input and output streams
        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) {
            Log.e(TAG, "temp sockets not created", e);
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;

        init();
    }

    private void init(){
        code = new byte[16];
        checksum = 0;
        tempbyte = 0;
        bytesread = -1;
        if(!results.isEmpty()){
            Log.i(TAG, "Already have found: " + results.size() + " things.");
        }
    }

    public void run(){
       //do things
    }
}
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 5

在构造函数中,您创建了一个与实例ArrayList同名的本地ArrayList引用,并初始化它.

List<String> results = new ArrayList<String>();  // This creates a local arraylist
Run Code Online (Sandbox Code Playgroud)

所以,你的实例ArrayList引用仍然是null.将该行更改为:

results = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)