我已经开发了一个android应用程序来从蓝牙打印机打印账单,我的代码抛出的异常是“java.lang.NullPointerException:试图在空对象引用上调用虚拟方法'void java.io.OutputStream.write(byte[])”。
连接蓝牙打印机并发送数据进行打印的代码如下:
enter code here
//这将找到一个蓝牙打印机设备
void findBT()
{
try {
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
//myLabel.setText("No bluetooth adapter available");
Utilities.showToast("No bluetooth adapter available", true);
}
if (!mBluetoothAdapter.isEnabled())
{
Utilities.showToast("Bluetooth is not On, Please Turn on Blueetooth", true);
}
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter
.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
//Toast.makeText(PrintMain.this, "Device Name : " + device.getName(), Toast.LENGTH_SHORT).show();
// MP300 is the name of the bluetooth printer device
if (device.getName().equals("PTP-III")) {
mmDevice = device;
break;
}
}
}
// myLabel.setText("Bluetooth Device Found");
Utilities.showToast("Bluetooth Device is Found", true);
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
enter code here
void openBT() throws IOException {
try {
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
//UUID uuid = UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mmOutputStream = mmSocket.getOutputStream();
mmInputStream = mmSocket.getInputStream();
beginListenForData();
// myLabel.setText("Bluetooth Opened");
Utilities.showToast("Bluetooth connection is Open now", true);
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
enter code here
void beginListenForData() {
try {
final Handler handler = new Handler();
// This is the ASCII code for a newline character
final byte delimiter = 10;
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
workerThread = new Thread(new Runnable() {
public void run() {
while (!Thread.currentThread().isInterrupted()
&& !stopWorker) {
try {
int bytesAvailable = mmInputStream.available();
if (bytesAvailable > 0) {
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for (int i = 0; i < bytesAvailable; i++) {
byte b = packetBytes[i];
if (b == delimiter) {
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0,
encodedBytes, 0,
encodedBytes.length);
final String data = new String(
encodedBytes, "US-ASCII");
readBufferPosition = 0;
handler.post(new Runnable() {
public void run() {
// myLabel.setText(data);
}
});
} else {
readBuffer[readBufferPosition++] = b;
}
}
}
} catch (IOException ex) {
stopWorker = true;
}
}
}
});
workerThread.start();
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
enter code here
void sendData(String VoucherNumber, String ConnectedCmpName, String EntryUserName, String PartyName, String VoucherDate, Context mContext1, String[] InvItemDtls ) throws IOException
{
try
{
String StrVisitAgain = "VISIT AGAIN \n";
mmOutputStream.write(StrVisitAgain.getBytes());
mmOutputStream.flush();
} catch (Exception e) {
Log.e("Main", "Exe ", e);
System.out.println("Excelption is : " + e.toString());
}
}
enter code here
void closeBT() throws IOException {
try {
stopWorker = true;
mmOutputStream.close();
mmInputStream.close();
mmSocket.close();
Utilities.showToast("Bluetootj is now Closed", true);
// myLabel.setText("Bluetooth Closed");
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
enter code here
//打印数据的代码
PrintSalesInvoice p = new PrintSalesInvoice();
try {
p.findBT();
p.openBT();
p.sendData(VoucherNumber, ConnectedCmpName, EntryUserName, PartyName, VoucherDate, getApplicationContext(),InvItemDtls);
p.closeBT();
} catch (IOException ex) {
}
在SendData Function(打印数据的函数)中添加波纹管代码解决了这个问题。
enter code here
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
我正在开发通过蓝牙与打印机连接并打印一些文本的应用程序。我可以通过蓝牙连接打印机,然后从BluetoothSocket获取输出流并写一些文本。但它不会用打印机打印任何东西...我仔细检查过,没有例外。请帮帮我我在代码中做错了什么???我使用佳能MX430打印机进行测试...这是我的代码
我必须为Android平板电脑开发一个应用程序,要求将文件打印到蓝牙打印机上。 通过蓝牙打印是我应用程序最重要的功能之一。 我尝试了这个项目和这个项目。 它不工作,也不报告任何错误-不要打印。 蓝牙打印机有什么建议吗?
大多数相关的答案和谷歌都包含了关于这个话题的相当古老的贡献。因此,我正在寻找一种方法,使我的Android应用程序打印收据(58毫米宽)通过蓝牙热收据打印机。是否有必要使用带有第三方API的打印机?我想买一台普通的蓝牙打印机,它可以连接到我的设备上,并使用默认的Android打印管理器为收据进行布局。有可能吗?有样本、文档或教程吗?会很感激的。提前致谢
问题内容: 我必须在热蓝牙打印机上打印一些数据,我正在这样做: 它适用于文本,但不适用于图像。我想我需要获取byte[]图像数据。我尝试通过这种方式获取图像数据: 不幸的是,打印机打印了许多奇怪的字符(大约50厘米的纸张)。我不知道如何打印图像。 我想尝试获取位图的像素,然后将其转换为a byte[]并发送,但是我不知道该怎么做。 谢谢 更新: 经过这么长时间,我正在执行此操作:我有一个名为pri
我有一个应用程序,打印数据(文本和图像)到热敏打印机。 我的问题是,每当我打印冗长的数据时,打印输出就会被剪切,我会在打印的try-catch语句中抛出一个。 以下是我打印数据的部分: 这是我的打印签名功能,它类似于我用来打印徽标的功能。 ConvertBitmap函数: convertArgbToGrayScale函数: 我现在的问题是,在调用printSignature()函数后,打印机停止打
我必须用热敏打印机打印发票收据。我用Zjiang热敏打印机打印收据。他们还提供了手册和演示项目。在演示项目中,他们使用一个库“btsdk.jar”来实现连接和打印。 我已经成功地建立了打印机和android设备之间的连接。但是没有关于文本对齐(中心、左、右)&单元格宽度、高度的指导原则。 我试过了。它只通过改变format2变量来改变文本高度。 打印信息- 发票收据