1、布局文件Listview

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".WriteAndReadActivity"> <android.support.constraint.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.8" /> <android.support.constraint.Guideline
android:id="@+id/guideline5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.9" /> <Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="返回"
app:layout_constraintBottom_toTopOf="@+id/guideline5"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline5" /> <ScrollView
android:id="@+id/scrollView2"
android:layout_width="0dp"
android:layout_height="0dp"
android:fillViewport="true"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@+id/guideline3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"> <ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp" />
</LinearLayout>
</ScrollView> </android.support.constraint.ConstraintLayout>

2、listview_item布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:minHeight="100dp"
> <TextView
android:id="@+id/textView_list_item_id"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text=""
/>
<TextView
android:id="@+id/textView_list_item_epc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:gravity="center"
android:textSize="10sp"
android:text=""
/>
<TextView
android:id="@+id/textView_list_item_sku"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:textSize="10sp"
android:text=""
/> <TextView
android:id="@+id/textView_list_item_filename"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="文件名"
android:gravity="center"
android:textSize="10sp"
/> <TextView
android:id="@+id/textView_list_item_state"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="状态"
android:gravity="center"
android:textSize="10sp"
/> <Button
android:id="@+id/textView_list_btn_read"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="读"
android:layout_weight="1" /> <Button
android:id="@+id/textView_list_btn_write"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="写"
android:layout_weight="1" /> </LinearLayout>

3、Activity

package com.example.uhftopdf;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast; import com.example.uhftopdf.com.ReadWriteAdapter;
import com.example.uhftopdf.com.bean.CabinetInfo;
import com.example.uhftopdf.com.db.DatabaseAccess; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class WriteAndReadActivity extends AppCompatActivity { private static final String TAGNAME = "WriteAndReadActivity";
private Button btn;
private ListView lv;
private DatabaseAccess dao;
private ArrayList<Map<String, Object>> listMap;
private List<CabinetInfo> cabinetInfos; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_write_and_read); btn = findViewById(R.id.button5); lv = findViewById(R.id.listView); dao = DatabaseAccess.getInstance(WriteAndReadActivity.this);
cabinetInfos = dao.getAll();
Log.e(TAGNAME,"----------11111-------epc=:"+cabinetInfos.size());
show(); lv.setOnItemClickListener(new ReadWriterItemClickListener()); btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(WriteAndReadActivity.this,MainActivity.class);
startActivity(intent);
}
}); } @Override
protected void onDestroy() {
super.onDestroy();
} private void show() {
ReadWriteAdapter adapter = new ReadWriteAdapter(this,cabinetInfos,R.layout.listview_item,dao);
lv.setAdapter(adapter);
} public class ReadWriterItemClickListener implements AdapterView.OnItemClickListener
{ @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ListView lView = (ListView)parent;
CabinetInfo car = (CabinetInfo)lView.getItemAtPosition(position);
// Toast.makeText(getApplicationContext(),p.getName(),0).show();
}
} }

4、java bean

package com.example.uhftopdf.com.bean;

public class CabinetInfo {
public static final String EPC = "epc";
public static final String SKU = "sku";
public static final String ID = "id";
public static final String FILENAME = "filename";
public static final String SAVEPATH = "savepath";
public static final String STATE = "state"; private String id;
private String epc;
private String sku;
private String state;
private String filename;
private String savePath; public CabinetInfo() {
} public CabinetInfo(String id,String filename,String epc, String sku,String savePath, String state ) {
this.epc = epc;
this.sku = sku;
this.id = id;
this.filename = filename;
this.savePath = savePath;
this.state = state;
} public CabinetInfo(String epc, String sku, String state, String filename, String savePath) {
this.epc = epc;
this.sku = sku;
this.filename = filename;
this.savePath = savePath;
this.state = state;
} public String getEPC() {
return epc;
} public String getSKU() {
return sku;
} public String getID() {
return id;
} public String getFILENAME() {
return filename;
} public String getSavePath() {
return savePath;
} public void setSavePath(String savePath) {
this.savePath = savePath;
} public String getSTATE() {
return state;
} public String getEpc() {
return epc;
} public void setEpc(String epc) {
this.epc = epc;
} public String getSku() {
return sku;
} public void setSku(String sku) {
this.sku = sku;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getFilename() {
return filename;
} public void setFilename(String filename) {
this.filename = filename;
} public void setState(String state) {
this.state = state;
} @Override
public String toString() {
return "CabinetInfo{" +
"id='" + id + '\'' +
", epc='" + epc + '\'' +
", sku='" + sku + '\'' +
", state='" + state + '\'' +
", filename='" + filename + '\'' +
", savePath='" + savePath + '\'' +
'}';
}
}

5、MySqliteOpenHelper

package com.example.uhftopdf.com.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory; public class MySqliteOpenHelper extends SQLiteOpenHelper {
public static final int DB_VERSION = 22;
public static final String DB_NAME = "Store_CabinetInfo.db";
public final static String TB_TAGINFO = "tb_taginfo";
public final static String TB_EPC = "tb_epc";
public MySqliteOpenHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
} @Override
public void onCreate(SQLiteDatabase db) {
CREATE(db);
CREATETableEPC(db);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
} public void CREATE(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS tb_taginfo(id integer primary key autoincrement,filename varchar(60),epc varchar(60),sku varchar(60),savepath varchar2(120),state varchar(5))");
} public void CREATETableEPC(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS tb_epc(id integer primary key autoincrement,sku char(24),epc char(32),serNum int)");
}
}

6、DatabaseAccess

package com.example.uhftopdf.com.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import com.example.uhftopdf.com.bean.CabinetInfo; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class DatabaseAccess {
private final List<String> TAGUID = new ArrayList<String>();
private final List<String> SERVICEUID = new ArrayList<String>();
private final List<String> SERVICESKU = new ArrayList<String>();
private final StringBuffer DATA = new StringBuffer();
private Map<String, Integer> map_sku = new HashMap();
boolean su;
private static MySqliteOpenHelper mSqliteOpenHelper;
private SQLiteDatabase db;
private static DatabaseAccess dbAccess;
private static Context mcontext; public static synchronized DatabaseAccess getInstance(Context context) {
if (dbAccess == null) {
mcontext = context;
dbAccess = new DatabaseAccess(context);
mSqliteOpenHelper = new MySqliteOpenHelper(context, MySqliteOpenHelper.DB_NAME, null, MySqliteOpenHelper.DB_VERSION);
}
return dbAccess;
} private DatabaseAccess(Context context) {
} public synchronized void close() {
if (db != null && db.isOpen()) {
db.close();
}
if (mSqliteOpenHelper != null) {
mSqliteOpenHelper.close();
}
} public void clearn() {
map_sku.clear();
SERVICESKU.clear();
TAGUID.clear();
SERVICEUID.clear();
DATA.delete(0, DATA.length());
} public synchronized long InsertInfoToDB( String epc, String sku, String state, String filename,String savePath) {
db = mSqliteOpenHelper.getWritableDatabase();
ContentValues values = new ContentValues(); values.put(CabinetInfo.EPC, epc);
values.put(CabinetInfo.SKU, sku);
values.put(CabinetInfo.STATE, state);
values.put(CabinetInfo.FILENAME, filename);
values.put(CabinetInfo.SAVEPATH, savePath);
long rows = db.insert(MySqliteOpenHelper.TB_TAGINFO, null, values);
return rows;
} public synchronized int upgradetoryInfoToDB( String epc, String state) {
ContentValues values = new ContentValues(); values.put(CabinetInfo.STATE, state); int rows = db.update(MySqliteOpenHelper.TB_TAGINFO, values, "EPC=?", new String[]{epc});
return rows;
} public String getCount(String epc) {
String count = "";
Cursor cursor = null;
try {
db = this.mSqliteOpenHelper.getWritableDatabase(); cursor = db.rawQuery("select * from TB_TAGINFO where epc=?", new String[]{ epc}); // cursor = db.query(MySqliteOpenHelper.TB_TAGINFO, new String[]{"inventoryNum", "sku"}, "inventoryNum=? and sku=?", new String[]{SetOdd_Numbers, sku}, null, null, null);
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
count = cursor.getString(cursor.getColumnIndex("epc"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
return count;
} public synchronized boolean AllDataIsRepeat(String epc) {
su = false;
Cursor cursor = null;
try {
db = this.mSqliteOpenHelper.getWritableDatabase();
cursor = db.query(MySqliteOpenHelper.TB_TAGINFO, new String[]{"epc"}, "epc=?", new String[]{epc}, null, null, null);
if (cursor != null && cursor.moveToNext()) {
su = true;
} else {
su = false;
}
} catch (Exception e) {
// TODO: handle exception
} finally {
if (cursor != null) {
cursor.close();
}
}
return su;
} /**
* 删除整个数据库
*
* @return
*/
public synchronized int delAllFromTAGINFO() {
db = mSqliteOpenHelper.getWritableDatabase();
int num = db.delete(MySqliteOpenHelper.TB_TAGINFO, null, null);
return num;
} public synchronized int delFromTAGINFO(String epc) {
db = mSqliteOpenHelper.getWritableDatabase();
int num = db.delete(MySqliteOpenHelper.TB_TAGINFO, "epc=?", new String[]{epc});
return num;
} public synchronized List<CabinetInfo> getAll() {
List<CabinetInfo> infoList = new ArrayList<>(); db = mSqliteOpenHelper.getWritableDatabase();
String sql = "select * from " + MySqliteOpenHelper.TB_TAGINFO ;
Cursor cursor = db.rawQuery(sql, null); if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String id = cursor.getString(0);
String filename = cursor.getString(1);
String epc = cursor.getString(2);
String sku = cursor.getString(3);
String savepath = cursor.getString(4);
String state = cursor.getString(5); CabinetInfo info = new CabinetInfo(id,filename, epc, sku, savepath, state);
infoList.add(info);
}
}
if (cursor != null)
cursor.close();
return infoList;
} public synchronized CabinetInfo getCabByEpc(String epc) { db = mSqliteOpenHelper.getWritableDatabase();
String sql = "select * from " + MySqliteOpenHelper.TB_TAGINFO +" where epc='"+epc+"'";
Cursor cursor = db.rawQuery(sql, null); if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String id = cursor.getString(0);
String filename = cursor.getString(1);
String tempEpc = cursor.getString(2);
String sku = cursor.getString(3);
String savepath = cursor.getString(4);
String state = cursor.getString(5); CabinetInfo info = new CabinetInfo(id,filename, tempEpc, sku, savepath, state);
return info;
}
}
if (cursor != null)
cursor.close();
return null;
} public synchronized CabinetInfo getCabBySku(String sku) { db = mSqliteOpenHelper.getWritableDatabase();
String sql = "select * from " + MySqliteOpenHelper.TB_TAGINFO +" where sku='"+sku+"'";
Cursor cursor = db.rawQuery(sql, null); if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String id = cursor.getString(0);
String filename = cursor.getString(1);
String tempEpc = cursor.getString(2);
String strSku = cursor.getString(3);
String savepath = cursor.getString(4);
String state = cursor.getString(5); CabinetInfo info = new CabinetInfo(id,filename, tempEpc, strSku, savepath, state);
return info;
}
}
if (cursor != null)
cursor.close();
return null;
}
}

7、ReadWriteAdapter

package com.example.uhftopdf.com;

import android.content.Context;
import android.graphics.Color;
import android.os.Environment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast; import com.android.hdhe.uhf.reader.UhfReader;
import com.android.hdhe.uhf.readerInterface.TagModel;
import com.example.uhftopdf.MainActivity;
import com.example.uhftopdf.R;
import com.example.uhftopdf.com.bean.CabinetInfo;
import com.example.uhftopdf.com.db.DatabaseAccess;
import com.example.uhftopdf.com.util.SoundUtil;
import com.example.uhftopdf.com.util.StringUtil; import java.io.File;
import java.util.List;
import java.util.Map; import cn.pda.serialport.Tools; public class ReadWriteAdapter extends BaseAdapter { public static final String PWD = "00000000";
public int membank = UhfReader.MEMBANK_EPC;
private int addr = 2;// begin address
private List<CabinetInfo> cabinetInfos;
private int resource;
private LayoutInflater inflater;
private Context context; private UhfReader manager;
private String readEpc;
private int length = 8;
private DatabaseAccess dao; public ReadWriteAdapter(Context context,List<CabinetInfo> cabinetInfos, int resource) {
this.context = context;
this.cabinetInfos = cabinetInfos;
this.resource = resource;
manager = UhfReader.getInstance();
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
} public ReadWriteAdapter(Context context,List<CabinetInfo> cabinetInfos, int resource,DatabaseAccess dao) {
this.context = context;
this.cabinetInfos = cabinetInfos;
this.resource = resource;
this.dao = dao;
manager = UhfReader.getInstance();
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
} @Override
public int getCount() {
return cabinetInfos.size();
} @Override
public Object getItem(int position) {
return cabinetInfos.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null)
{
convertView = inflater.inflate(resource,null);
}
TextView idView = (TextView)convertView.findViewById(R.id.textView_list_item_id);
TextView epcView = (TextView)convertView.findViewById(R.id.textView_list_item_epc);
TextView filenameView = (TextView)convertView.findViewById(R.id.textView_list_item_filename);
TextView skuView = (TextView)convertView.findViewById(R.id.textView_list_item_sku);
TextView stateView = (TextView)convertView.findViewById(R.id.textView_list_item_state);
Button readBtn = (Button)convertView.findViewById(R.id.textView_list_btn_read);
Button writeBtn = (Button)convertView.findViewById(R.id.textView_list_btn_write); final CabinetInfo p = cabinetInfos.get(position);
final int pos = position;
idView.setText((position+1)+"");
epcView.setText(p.getEPC());
filenameView.setText(p.getFilename());
skuView.setText(p.getSku());
Log.d("Test", "----------------p.getSTATE()---------------"+p.getSTATE());
if("0".equals(p.getSTATE())){
stateView.setTextColor(Color.RED);
stateView.setText("未写" );
}else{
stateView.setTextColor(Color.GREEN);
stateView.setText( "已写");
} //读操作
readBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(context,"读",Toast.LENGTH_SHORT).show();
read();
}
}); //写操作
writeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(context,"写",Toast.LENGTH_SHORT).show();
String epc = p.getEPC();
Log.d("Test", "----------------epc---------------"+epc);
write(p.getEPC(),pos);
}
}); return convertView;
} private void read(){
byte[] accessPassword = Tools.HexString2Bytes(PWD); byte[] data = manager.readFrom6C(membank, addr, length, accessPassword);
Log.e("Test","-----------------manager=:"+manager);
Log.e("Test","----------11111-------data=:"+data);
Log.e("Test","----------11111-------(data != null )=:"+(data != null ));
Log.e("Test","----------11111-------(data.length > 1)=:"+( data.length > 1));
Log.e("Test","----------11111-------(data != null && data.length > 1)=:"+(data != null && data.length > 1));
if (data != null && data.length > 1) {
readEpc = Tools.Bytes2HexString(data, data.length);
Toast.makeText(context,readEpc,Toast.LENGTH_LONG).show();
}else{
// Toast.makeText(context,readEpc,Toast.LENGTH_LONG).show();
Toast.makeText(context,"读取失败",Toast.LENGTH_LONG).show();
} } private void write(String epc,int position){
if(readEpc==null || "".equals(readEpc)){
Toast.makeText(context,"请先扫描标签",Toast.LENGTH_LONG).show();
return;
}
Log.d("Test", "----------------readEpc---------------"+readEpc);
Log.e("Test","-----------------manager=:"+manager);
manager.selectEPC(Tools.HexString2Bytes(readEpc));
byte[] accessPassword = Tools.HexString2Bytes(PWD);
if (accessPassword.length != 4) {
Toast.makeText(context,"写入密码错误",Toast.LENGTH_LONG).show();
return;
}
String writeData = epc;
Log.d("Test", "----------------writeData---------------"+writeData);
if (writeData.length() % 4 != 0) {
Toast.makeText(context,"写入数据字节数错误",Toast.LENGTH_LONG).show();
return;
}
byte[] dataBytes = Tools.HexString2Bytes(writeData);
// dataLen = dataBytes/2 dataLen
Log.d("Test", "----------------accessPassword---------------"+accessPassword);
Log.d("Test", "----------------membank---------------"+membank);
Log.d("Test", "----------------addr---------------"+addr);
boolean writeFlag = manager.writeTo6C(accessPassword, membank,
addr, dataBytes.length / 2, dataBytes); if (writeFlag) { CabinetInfo cab = cabinetInfos.get(position);
dao.upgradetoryInfoToDB(writeData,"1");
cab.setState("1");
update(position, cab);
Toast.makeText(context,"写入成功",Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context,"写入失败",Toast.LENGTH_LONG).show();
}
} //实时更新ListView数据
private void update(int position,CabinetInfo cabinetInfo){
cabinetInfos.set(position,cabinetInfo);
this.notifyDataSetChanged();
} }

android ListView中含有按钮事件实时更新ListView数据案例的更多相关文章

  1. Android Listview中Button按钮点击事件冲突解决办法

    今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...

  2. highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度

    highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度 作者:highcharts | 时间:2014-6-11 14:07:05 | [小  大] | ...

  3. ListView中含有EditText时候--要命的焦点问题迎刃而解

    最近做项目的时候遇到了一个问题,就是在ListView的item上面含有一个EditText,要求是这样: 1当点击item的时候,item可以点击; 2当点击EditText的时候EditText也 ...

  4. android代码优化----ListView中自定义adapter的封装(ListView的模板写法)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. Android开发系列之按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

  6. Android Tv 中的按键事件 KeyEvent 分发处理流程

    这次打算来梳理一下 Android Tv 中的按键点击事件 KeyEvent 的分发处理流程.一谈到点击事件机制,网上资料已经非常齐全了,像什么分发.拦截.处理三大流程啊:或者 dispatchTou ...

  7. ListView 中含有 EditText 导致焦点丢失的问题

    ListView 中的 item 中有 EditText 时. 如果activity的输入法选项设置为 android:windowSoftInputMode="adjustResize&q ...

  8. asp.net中父子页面通过gridview中的按钮事件进行回传值的问题

    这两天写BS程序,遇到父子页面传值的问题,以前没写过web系统,用了几天时间才将问题解决,总结下记录下来: 问题描述: 父页面A中有一个gridview,每行6个列,有5列中均有一个按钮,单击按钮,会 ...

  9. Android 进价5_自定义广播 通过广播更新ListView的适配器 下载管理

    1.在处理下载管理时,服务在后台运行,下载完成后要更新listview列表的按钮,将“下载”改成“打开”这样一个功能. 在Activity里面写一个静态内部类,继承广播.其中属性text_button ...

随机推荐

  1. 使用plv8+hashids生成短链接服务

    有写过一个集成npm plv8 以及shortid生成短链接id服务,实际上我们可以集成触发器自动生成url对应的短链接地址,hashids也是一个不错的选择. 以下是一个别人写的一个博客实现可以参考 ...

  2. mysql where/having

    select * from t1 where id<5;select * from t1 where id<5; where 从t1中筛选内容 而having从*中筛选内容

  3. ESA2GJK1DH1K基础篇: 阿里云物联网平台: 测试MQTT连接阿里云物联网平台

    前言 这节看一下在阿里云上实现MQTT通信是个怎样的流程 看了很多网上的教程,感觉讲的迷迷糊糊.... 其实感觉他们是对MQTT不够透彻,所以写的文章就是个比着葫芦画瓢的感觉 在我面前这东西就是玩具. ...

  4. [Python] Python 获取中文的首字母 和 全部拼音首字母

    Python 获取中文的首字母 和 全部拼音首字母 代码如下: import pinyin def getStrAllAplha(str): return pinyin.get_initial(str ...

  5. 联想笔记本上Ubuntu无线网卡问题

    可能有两个问题: 1.无无线网卡驱动 2.无线网卡驱动不能自动加载 问题1:无线网卡驱动 百度出网卡驱动iwlwifi-9000,如iwlwifi-9000-pu-b0-jf-b0-34.618819 ...

  6. 【JZOJ100208】【20190705】传说之下

    题目 三维空间上有一个点,进行了\(n\)次移动 第\(i\)次为在\([0,L_i]\)内随机一个长度\(l_i\),向\(\vec P_i\)方向移动\(l_i\) $\vec P_i $ 表示为 ...

  7. AI保存文件出现了未知错误 (Adobe Illustrator)

    可能的原因如下:1 把文件中所有的文字全选,转成曲线,把所有的文字都创建成轮廓2 新建一个页面,把制作的复制到新页面里3 需要把图层全部解锁再保存4 没有权限,设置一下即可5 PRINT SPOOLE ...

  8. 模型区分度衡量指标-KS值

    1.KS值--学习器将正例和反例分开的能力,确定最好的“截断点” KS曲线和ROC曲线都用到了TPR,FPR.KS曲线是把TPR和FPR都作为纵坐标,而样本数作为横坐标.但是AUC只评价了模型的整体训 ...

  9. Linux 就该这么学 CH09 使用ssh服务管理远程主机

    1 .配置网络服务 1)配置网络参数   五种配置网络的方法:命令行,编译网络配置文件,nmtui(旧版ui界面),nm-connection-edit(新版ui),VM虚拟机右上角图标等.  这里配 ...

  10. cad.net 2008使用WPF(摘录山人)

    由于WPF的优点多多,而且在大量的winform的操作下感觉到数据操作的麻烦....推荐大家看杨中科WPF数据绑定教程 https://www.bilibili.com/video/av3388348 ...