今天测试了一下最佳评论里面的代码,发现居然报错了!!!
Uncaught android.os.NetworkOnMainThreadException;at new java.net.Socket
不能在主线程调用网络,只能采用异步方式。而且,这个问题出现在Andriod 4.0以上:
Android在4.0之前的版本 支持在主线程中访问网络,4.0以后不支持。
解决方法:
1.通过新的线程访问网络
然后,新的线程访问是不可能了,目前NJS的一块短板,真头疼。
然后看了些文章,说可以用StrictMode来改良异步阻塞问题,于是果断对上面Chuck大神的代码改良了一下。
var Socket = plus.android.importClass("java.net.Socket");
var PrintWriter = plus.android.importClass("java.io.PrintWriter");
var BufferedWriter = plus.android.importClass("java.io.BufferedWriter");
var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");
var BufferedReader = plus.android.importClass("java.io.BufferedReader");
var InputStreamReader = plus.android.importClass("java.io.InputStreamReader");
//测试改良
var StrictMode = plus.android.importClass("android.os.StrictMode");
var Build = plus.android.importClass("android.os.Build");
if (Build.VERSION.SDK_INT > 9) {
var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
var socket = new Socket("192.168.1.100",9100);
于是,可以了……这里加个Andriod版本判断,可以兼容4.0以上和4.0以上。
谢天谢地解决问题,我终于可以用Andriod手机去调用热敏打印机愉快地打印小票了!