Java Android doInBackground错误

Java Android doInBackground错误,java,android,Java,Android,我是android开发的初学者,几天前我遇到了一个无法用doInBackground()方法解决的错误。 我的错误在代码的末尾,在 e2 = e11; createInsecureRfcommSocketToServiceRecord = null; this.sender = e2.getMessage(); createInsecureRfcommSocketToServiceRecord.close(); 错误是 未处理的异常:java.io.io.exception 如果您有解决方案,

我是android开发的初学者,几天前我遇到了一个无法用
doInBackground()
方法解决的错误。 我的错误在代码的末尾,在

e2 = e11;
createInsecureRfcommSocketToServiceRecord = null;
this.sender = e2.getMessage();
createInsecureRfcommSocketToServiceRecord.close();
错误是

未处理的异常:java.io.io.exception

如果您有解决方案,请提前感谢! 我的代码:

protected Object doInBackground(Object[] objArr) {
    BluetoothSocket createInsecureRfcommSocketToServiceRecord;
    IOException e;
    Throwable th;
    IButton a;
    Boolean valueOf;
    boolean z = true;
    this.jobType = (JobType) objArr[0];
    this.sender = (MainActivity) objArr[1];
    this.device = (BluetoothDevice) objArr[2];
    try {
        createInsecureRfcommSocketToServiceRecord =
                device.createInsecureRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
        try {
            createInsecureRfcommSocketToServiceRecord.connect();
        } catch (IOException e2) {
            Log.e("Bluetooth", e2.getMessage());
            Log.e("Bluetooth", "trying fallback");
            try {
                createInsecureRfcommSocketToServiceRecord = (BluetoothSocket)
                        this.device.getClass().getMethod("createInsecureRfcommSocket", new Class[]{Integer.TYPE}).invoke(this.device, new Object[]{Integer.valueOf(1)});
            } catch (Exception e3) {
                Log.e("Bluetooth", e3.getMessage());
            }
            try {
                createInsecureRfcommSocketToServiceRecord.connect();
            } catch (IOException e4) {
                e2 = e4;
                try {
                    this.error = e2.getMessage();
                    try {
                        createInsecureRfcommSocketToServiceRecord.close();
                    } catch (IOException e5) {
                    }
                    return null;
                } catch (Throwable th2) {
                    th = th2;
                    try {
                        createInsecureRfcommSocketToServiceRecord.close();
                    } catch (IOException e6) {
                    }
                    throw th;
                }
            }
        }
        if (this.jobType == JobType.read) {
            a = readDevice(createInsecureRfcommSocketToServiceRecord);
            try {
                createInsecureRfcommSocketToServiceRecord.close();
                return a;
            } catch (IOException e7) {
                return a;
            }
        } else

        if (this.jobType == JobType.stopMission) {
            a = (IButton) objArr[3];
            if (!(stopMission(createInsecureRfcommSocketToServiceRecord) &&
                    writeDevice(createInsecureRfcommSocketToServiceRecord, a))) {
                z = false;
            }
            valueOf = Boolean.valueOf(z);
            try {
                createInsecureRfcommSocketToServiceRecord.close();
                return valueOf;
            } catch (IOException e8) {
                return valueOf;
            }
        } else

        if (this.jobType == JobType.startMission) {
            boolean z2 = writeDevice(createInsecureRfcommSocketToServiceRecord, (IButton) objArr[3]) &&
                    startMission(createInsecureRfcommSocketToServiceRecord);
            valueOf = Boolean.valueOf(z2);
            try {
                createInsecureRfcommSocketToServiceRecord.close();
                return valueOf;
            } catch (IOException e9) {
                return valueOf;
            }
        } else {
            try {
                createInsecureRfcommSocketToServiceRecord.close();
            } catch (IOException e10) {
            }
            return null;
        }
    } catch (IOException e11) {
        e2 = e11;
        createInsecureRfcommSocketToServiceRecord = null;
        this.sender = e2.getMessage();
        createInsecureRfcommSocketToServiceRecord.close();
        return null;
    } catch (Throwable th3) {
        th = th3;
        createInsecureRfcommSocketToServiceRecord = null;
        createInsecureRfcommSocketToServiceRecord.close();
        throw th;
    }
    return null;
}
还抛出需要处理的
IOException
异常。此外,您应该使用
finally
块进行清理,并在关闭变量之前将其设置为
null
,小心不要引发
NullPointerExeption
s

您可以像这样改进代码

try {
    ....
} catch (Exception e) {
    ....
} finally {
    try {
        createInsecureRfcommSocketToServiceRecord.close();
        createInsecureRfcommSocketToServiceRecord = null;
    } catch (IOException e) {
    }
}

我正在用这个修改我的代码,但我是一个java.lang.NullPointerException。。。 函数doInBackground()非常困难。。。 谢谢你的帮助

我的代码修改

    protected Object doInBackground(Object[] objArr) {
    BluetoothSocket createInsecureRfcommSocketToServiceRecord = null;
    IOException e;
    Throwable th;
    IButton a;
    Boolean valueOf;
    boolean z = true;
    this.jobType = (JobType) objArr[0];
    this.sender = (MainActivity) objArr[1];
    this.device = (BluetoothDevice) objArr[2];
    try {
        createInsecureRfcommSocketToServiceRecord =
                device.createInsecureRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
        try {
            createInsecureRfcommSocketToServiceRecord.connect();
        } catch (IOException e2) {
            Log.e("Bluetooth", e2.getMessage());
            Log.e("Bluetooth", "trying fallback");
            try {
                createInsecureRfcommSocketToServiceRecord = (BluetoothSocket)
                        this.device.getClass().getMethod("createInsecureRfcommSocket", new Class[]{Integer.TYPE}).invoke(this.device, new Object[]{Integer.valueOf(1)});
            } catch (Exception e3) {
                Log.e("Bluetooth", e3.getMessage());
            }
            try {
                createInsecureRfcommSocketToServiceRecord.connect();
            } catch (IOException e4) {
                e2 = e4;
                try {
                    this.error = e2.getMessage();
                    try {
                        createInsecureRfcommSocketToServiceRecord.close();
                    } catch (IOException e5) {
                    }
                    return null;
                } catch (Throwable th2) {
                    th = th2;
                    try {
                        createInsecureRfcommSocketToServiceRecord.close();
                    } catch (IOException e6) {
                    }
                    throw th;
                }
            }
        }
        if (this.jobType == JobType.read) {
            a = readDevice(createInsecureRfcommSocketToServiceRecord);
            try {
                createInsecureRfcommSocketToServiceRecord.close();
                return a;
            } catch (IOException e7) {
                return a;
            }
        } else if (this.jobType == JobType.stopMission) {
            a = (IButton) objArr[3];
            if (!(stopMission(createInsecureRfcommSocketToServiceRecord) &&
                    writeDevice(createInsecureRfcommSocketToServiceRecord, a))) {
                z = false;
            }
            valueOf = Boolean.valueOf(z);
            try {
                createInsecureRfcommSocketToServiceRecord.close();
                return valueOf;
            } catch (IOException e8) {
                return valueOf;
            }
        } else if (this.jobType == JobType.startMission) {
            boolean z2 = writeDevice(createInsecureRfcommSocketToServiceRecord, (IButton) objArr[3]) &&
                    startMission(createInsecureRfcommSocketToServiceRecord);
            valueOf = Boolean.valueOf(z2);
            try {
                createInsecureRfcommSocketToServiceRecord.close();
                return valueOf;
            } catch (IOException e9) {
                return valueOf;
            }
        } else {
            try {
                createInsecureRfcommSocketToServiceRecord.close();
            } catch (IOException e10) {
            }
            return null;
        }
    } catch (IOException e11) {
        try {
            createInsecureRfcommSocketToServiceRecord.close();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        createInsecureRfcommSocketToServiceRecord = null;
        return null;
    } catch (Throwable th3) {
        th = th3;
    } finally {
        try {
            createInsecureRfcommSocketToServiceRecord.close();
            createInsecureRfcommSocketToServiceRecord = null;
        } catch (IOException e2) {
        }
    }
    return null;
}

你应该考虑使用<代码>最后的<代码>进行清理。这是你的工作例子还是另外一个问题?我不知道如何理解。这是我的工作示例,但没有工作。。。我是JavaLang.null PoExtExtExcor错误。然后你应该考虑问一个新问题。或者最好自己寻找错误<代码>空点异常很容易找到。至少需要logcat的stacktrace。Tynn,谢谢你的解决方案!工作完美!