Android中文乱码
在你所在的activity中设置编码格式,一般采用utf,有的采用gbk数据一般是别人下发数据你进行接收,那么就必须采用gbk进行格式转化;
上图中reload是你当前视图中看到的代码格式转换;
cnvert是将你跑应用时应用中文字显示的格式;
还有一种万能手法:
在build.gradle中添加 在android 目录中:compileOptions.encoding = "GBK”
按行读取txt文件,按"|"进行字符串分割,标红的地方时 关键代码。很简单
public class MainActivity extends AppCompatActivity {
private static final String TAG = "mainactivity";
Button button;
Button buttonScanner;
String fileName_xls_string = "/sdcard/import_inventory_data.xls";
String fileName_TXT_string = "/sdcard/import_inventory_data.TXT";
@BindView(R.id.im_11)
ImageView im11;
@BindView(R.id.im_12)
ImageView im12;
@BindView(R.id.im_13)
ImageView im13;
@BindView(R.id.im_21)
ImageView im21;
@BindView(R.id.im_22)
ImageView im22;
@BindView(R.id.im_23)
ImageView im23;
@BindView(R.id.im_31)
ImageView im31;
List<data_new> data_news;
private Object usb;
TextView textView;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
// updateApks();
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
textView=(TextView) findViewById(R.id.tv_version);
textView.setText("当前版本: "+Tools.getVersion(this)+"");
InitData();
IntentFilter filter = new IntentFilter();
filter.addAction("com.android.server.scannerservice.broadcast");
this.registerReceiver(mResultReceiver, filter);
requestPermissions();
UpdateManager updateManager=new UpdateManager(MainActivity.this,"http://121.41.117.1:98/pcheck/version_pcheck.xml");
updateManager.checkUpdate();
// getUsb();
}
private void InitData() {
//数据查询
data_news = DBManager.getInstance(MainActivity.this).queryUserList();
}
//文件读取 execel格式
public List ReadExecelTwo(String strFilePath) throws IOException, BiffException {
List<data_new> gate_list = new ArrayList<>();
Sheet sheet;
Workbook book;
//Q1G_Path为要读取的excel文件完全路径名
book = Workbook.getWorkbook(new File(strFilePath));
//获得第一个工作表对象(ecxel中sheet的编号从0开始,0,1,2,3,....)
sheet = book.getSheet(0);
for (int i = 2; i < sheet.getRows(); i++) {
//列对应Date对象标记-1
data_new gate = new data_new();
gate.setID(i - 1);//(列,行);
gate.setNUMBERING(sheet.getCell(0, i).getContents());//(列,行);
gate.setNAME(sheet.getCell(1, i).getContents());
gate.setCLASSIFICATION(sheet.getCell(2, i).getContents());
gate.setGETTING_METHOR(sheet.getCell(3, i).getContents());
gate.setSPECIFICATIONA(sheet.getCell(4, i).getContents());
gate.setCOUNTER(sheet.getCell(5, i).getContents());
gate.setGET_THE_DATA(sheet.getCell(6, i).getContents());
gate.setDATA_O_ENTRY(sheet.getCell(7, i).getContents());
gate.setVALUE_TYPE(sheet.getCell(8, i).getContents());
gate.setBOOK_AMOUNT(sheet.getCell(9, i).getContents());
gate.setVALUE_MONEY(sheet.getCell(10, i).getContents());
gate.setINVENTORY_AMOUNT(sheet.getCell(11, i).getContents());
gate.setINVENTORY_RESULT(sheet.getCell(12, i).getContents());
gate.setLOCATION(sheet.getCell(13, i).getContents());
gate.setUSER_OF_DEPARTMENT(sheet.getCell(14, i).getContents());
gate.setUSERS(sheet.getCell(15, i).getContents());
gate.setNOTE(sheet.getCell(16, i).getContents());
gate.setStatus("未盘");
gate_list.add(gate);
}
DBManager.getInstance(MainActivity.this).insertUserList(gate_list);
/*数据导出完成弹框*/
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("提示");
builder.setMessage("数据导出完成");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "已经导出数据", Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog = builder.create();
dialog.show();
return gate_list;
}
//文件读取2 txt格式
public List ReadTxTwo(String strFilePath) {
List<data_new> gate_list = new ArrayList<>();
String path = strFilePath;
ArrayList<String> newList = new ArrayList<String>();
//打开文件
File file = new File(path);
//如果path是传递过来的参数,可以做一个非目录的判断
if (file.isDirectory()) {
Log.d("TestFile", "The File doesn't not exist isDirectory");
} else {
try {
InputStream instream = new FileInputStream(file);
if (instream != null) {
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
String strLine;
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));//Android解决读取txt文件中文乱码问题,
//分行读取
while ((line = reader.readLine()) != null) {
newList.add(line + "\n"); //按行读取txt文件,
}
for (int i = 0; i < newList.size(); i++) {
Log.d(TAG, "ReadTxtFile: " + newList.get(i));
String data = newList.get(i);
String[] arr = data.split("\\|");//根据“ ”和“,”区分 //按"|"进行字符串分割,标
data_new gate = new data_new();
gate.setID(i - 1);//(列,行);
gate.setNUMBERING(arr[0]);//(列,行);
gate.setNAME(arr[1]);
gate.setBOOK_AMOUNT(arr[2]);
gate.setVALUE_MONEY(arr[3]);
gate.setStatus("未盘");
gate_list.add(gate);
}
DBManager.getInstance(MainActivity.this).insertUserList(gate_list);
/*数据导出完成弹框*/
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("提示");
builder.setMessage("数据导出完成");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "已经导出数据", Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog = builder.create();
dialog.show();
instream.close();
}
} catch (FileNotFoundException e) {
Log.d("TestFile", "The File doesn't not exist FileNotFoundException");
} catch (IOException e) {
Log.d("TestFile", e.getMessage());
}
}
return gate_list;
}
private BroadcastReceiver mResultReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (intent.getAction().equals("com.android.server.scannerservice.broadcast")) {
Log.d(TAG, "mResultReceiver scannerdata=" + intent.getStringExtra("scannerdata" + "1212121212121"));
// textView.setText(getString(R.string.m_1111) + intent.getStringExtra("scannerdata"));
}
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
@OnClick({R.id.im_11, R.id.im_12, R.id.im_13, R.id.im_21, R.id.im_22, R.id.im_23, R.id.im_31})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.im_11://资产导入
// UpdateManager updateManager=new UpdateManager(MainActivity.this,"http://121.41.117.1:98/pcheck/version_pcheck.xml");
// updateManager.checkUpdate();
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("提示");
builder.setMessage("点击确定导入数据");
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
File fileName_xls = new File(fileName_xls_string);
File fileName_TXT = new File(fileName_TXT_string);
if (fileName_xls.exists()&&fileName_TXT.exists()){
Toast.makeText(MainActivity.this, "目录中存在txt和xls导入文件,请删除不需导入文件", Toast.LENGTH_LONG).show();
}else {
//根据文件类型读取文件
if (fileName_xls.exists()){
ReadExecelTwo(fileName_xls_string);
} else if (fileName_TXT.exists()){
ReadTxTwo(fileName_TXT_string);
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
}
}
});
AlertDialog dialog = builder.create();
dialog.show();
break;
case R.id.im_12://资产导出
// SelfDialog.getInstanceYesAndNo
// (MainActivity.this,"提示","确定导出数据","确定","取消")
// .buildYesAndNoDialog();
AlertDialog.Builder builder12 = new AlertDialog.Builder(MainActivity.this);
builder12.setTitle("提示");
builder12.setMessage("确定导出数据");
builder12.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
});
builder12.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//导出数据Excel调用
ExpportDataBeExcel expportDataBeExcel = new ExpportDataBeExcel(MainActivity.this);
data_news = DBManager.getInstance(MainActivity.this).queryUserList();
expportDataBeExcel.exportData(data_news);
}
});
AlertDialog dialog12 = builder12.create();
dialog12.show();
break;
case R.id.im_13://数据重置
AlertDialog.Builder builder13 = new AlertDialog.Builder(MainActivity.this);
builder13.setTitle("提示");
builder13.setMessage("确定数据重置");
builder13.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
for (int i=0;i<data_news.size();i++){
data_new dataNew=data_news.get(i);
dataNew.setID(dataNew.getID());
dataNew.setINVENTORY_AMOUNT("0.00");
dataNew.setINVENTORY_RESULT("");
dataNew.setStatus("未盘");
DBManager.getInstance(MainActivity.this).updateUser_all(dataNew);
}
AlertDialog.Builder builder131 = new AlertDialog.Builder(MainActivity.this);
builder131.setTitle("提示");
builder131.setMessage("数据重置完成");
builder131.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog131 = builder131.create();
dialog131.show();
}
});
builder13.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog13 = builder13.create();
dialog13.show();
break;
case R.id.im_21://资产盘点
Intent intent21 = new Intent(MainActivity.this, ActivityPropertyCheckActivity.class);
startActivity(intent21);
// CustomDialog dialog1=new CustomDialog.Builder(MainActivity.this)
// .view(R.layout.dialog_layout)
// .addViewOnclick(R.id.btn_dialog_cancel, new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Toast.makeText(MainActivity.this, "quxiao", Toast.LENGTH_SHORT).show();
// }
// })
// .addViewOnclick(R.id.btn_dialog_go, new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Toast.makeText(MainActivity.this, "quxiao", Toast.LENGTH_SHORT).show();
// }
// })
// .build();
// //代码设置view属性
// TextView tv_title = dialog1.findView(R.id.txt_dialog_title);
// TextView tips = dialog1.findView(R.id.txt_dialog_message);
// TextView tv_update = dialog1.findView(R.id.btn_dialog_go);
// tv_title.setText("辞职信");
// tips.setText("由于程序猿这行业是高危行业,所以我决定明天就向老板申请离职,毕竟世界那么大,我还想活着去看看");
// tv_update.setText("立即辞职");
// dialog1.show();
break;
case R.id.im_22://资产查询
Intent intent22 = new Intent(MainActivity.this, AssertLookActivity.class);
startActivity(intent22);
break;
case R.id.im_23://清查结果
Intent intent23 = new Intent(MainActivity.this, Result_look_TabLayoutActivity.class);
startActivity(intent23);
break;
case R.id.im_31://退出系统
AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this);
builder2.setTitle("提示");
builder2.setMessage("确定退出?");
builder2.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
});
builder2.setPositiveButton("退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.exit(0);
}
});
AlertDialog dialog2 = builder2.create();
dialog2.show();
break;
}
}
private void requestPermissions() {
RxPermissions rxPermission = new RxPermissions(this);
rxPermission
.requestEach(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
// Manifest.permission.ACTION_USB_PERMISSION
)
.subscribe(new Consumer<Permission>() {
@Override
public void accept(Permission permission) throws Exception {
if (permission.granted) {
// 用户已经同意该权限
Log.d(TAG, permission.name + " is granted.");
} else if (permission.shouldShowRequestPermissionRationale) {
// 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时。还会提示请求权限的对话框
Log.d(TAG, permission.name + " is denied. More info should be provided.");
} else {
// 用户拒绝了该权限,而且选中『不再询问』
Log.d(TAG, permission.name + " is denied.");
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mResultReceiver != null) {
this.unregisterReceiver(mResultReceiver);
}
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public Object getUsb() {
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while(deviceIterator.hasNext()){
UsbDevice device = deviceIterator.next();
//your code
Log.d(TAG, "getUsb: "+device.getDeviceName()+"/"+device.getManufacturerName()+"/"+device.getProductName());
}
return usb;
}
}