SQLite根据wifi扫描创建多表的有关问题
www.MyException.Cn,网友分享于:2014-06-30 浏览:2次
SQLite根据wifi扫描创建多表的问题
有一个想法是通过WIFI扫描时,例如扫描到了20个wifi,然后能自动为每一个WIFI创建一张它的数据表。请教过老师说可以设置变量,利用wifi的MAC地址来唯一识别建表。后面在存储数据的时候把一个wifi的数据单独的存在那个表中。 不过不懂得怎么实现,求高手解答,能写写源码最好,讲的清楚点,我刚接触安卓
------解决思路----------------------
其实就是用MAC来做表名(当然MAC要变化一下。那个:是不能直接用在表名中的)。
主要代码:
private WifiManager wifiManager;
private List<ScanResult> scanResultsList;//放wifi扫描结果
private SQLiteDatabase db=null;//数据库
String tblName="";//表名,由MAC动态生成出来的。
BroadcastReceiver bcr=null;//获取扫描结果的Receiver
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
detectonbButton = (Button) findViewById(R.id.submit);//开始扫描wifi的按钮
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);//获取到WIFI服务
detectonbButton.setOnClickListener(new OnClickListener() {//当单击该按钮时,开始wifi 扫描
@Override
public void onClick(View v) {
wifiManager.startScan();//启动wifi扫描
}
});
//创建一个全局可用的数据库,文件名是:wifi_data.db
try {
db=this
.createPackageContext("你的包名全称", MODE_WORLD_READABLE
------解决思路----------------------
MODE_WORLD_WRITEABLE)
.openOrCreateDatabase(this.getFilesDir()+"/wifi_data.db",Context.MODE_WORLD_READABLE
------解决思路----------------------
MODE_WORLD_WRITEABLE,null );
}
catch (NameNotFoundException e1) {
// TODO Auto-generated catch block
//e1.printStackTrace();
Toast.makeText(this, "创建数据库出错:"+e1.getMessage(), Toast.LENGTH_LONG).show();
return;
}
//获取wifi扫描结果的Receiver
//获取扫描结果
bcr=new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
{
//获取wifi的扫描结果
scanResultsList=wifiManager.getScanResults();
//对每一个wifi AP
for(int i=0;i<=scanResultsList.size()-1;i++)
{
//取出当前的wifi AP
ScanResult e=scanResultsList.get(i);
//获取它的MAC
String ssid=e.BSSID.trim().toLowerCase();//假设该MAC可直接做表名。否则要将其中的特殊符号:改为_。
tblName=ssid;//表名,由MAC动态生成出来的。
//在前边创建的db中,创建该表tblName,字段:id--主键。ssid-ap名称。level--wifi信号强度
String sql= "create table if not exists "
+tblName
+" ( id integer primary key autoincrement,ssid,level ) ";
//创建该表.表名,由MAC动态生成出来的。
try{
db.execSQL(sql);
}catch(Exception e){
Toast.makeText(MyActivity.this, "创建数据表出错:"+e1.getMessage(), Toast.LENGTH_LONG).show();
}
}//for
}//if
};
//将bcr注册,才能收到扫描结果的消息
this.registerReceiver(bcr, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}
有一个想法是通过WIFI扫描时,例如扫描到了20个wifi,然后能自动为每一个WIFI创建一张它的数据表。请教过老师说可以设置变量,利用wifi的MAC地址来唯一识别建表。后面在存储数据的时候把一个wifi的数据单独的存在那个表中。 不过不懂得怎么实现,求高手解答,能写写源码最好,讲的清楚点,我刚接触安卓
------解决思路----------------------
其实就是用MAC来做表名(当然MAC要变化一下。那个:是不能直接用在表名中的)。
主要代码:
private WifiManager wifiManager;
private List<ScanResult> scanResultsList;//放wifi扫描结果
private SQLiteDatabase db=null;//数据库
String tblName="";//表名,由MAC动态生成出来的。
BroadcastReceiver bcr=null;//获取扫描结果的Receiver
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
detectonbButton = (Button) findViewById(R.id.submit);//开始扫描wifi的按钮
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);//获取到WIFI服务
detectonbButton.setOnClickListener(new OnClickListener() {//当单击该按钮时,开始wifi 扫描
@Override
public void onClick(View v) {
wifiManager.startScan();//启动wifi扫描
}
});
//创建一个全局可用的数据库,文件名是:wifi_data.db
try {
db=this
.createPackageContext("你的包名全称", MODE_WORLD_READABLE
------解决思路----------------------
MODE_WORLD_WRITEABLE)
.openOrCreateDatabase(this.getFilesDir()+"/wifi_data.db",Context.MODE_WORLD_READABLE
------解决思路----------------------
MODE_WORLD_WRITEABLE,null );
}
catch (NameNotFoundException e1) {
// TODO Auto-generated catch block
//e1.printStackTrace();
Toast.makeText(this, "创建数据库出错:"+e1.getMessage(), Toast.LENGTH_LONG).show();
return;
}
//获取wifi扫描结果的Receiver
//获取扫描结果
bcr=new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
{
//获取wifi的扫描结果
scanResultsList=wifiManager.getScanResults();
//对每一个wifi AP
for(int i=0;i<=scanResultsList.size()-1;i++)
{
//取出当前的wifi AP
ScanResult e=scanResultsList.get(i);
//获取它的MAC
String ssid=e.BSSID.trim().toLowerCase();//假设该MAC可直接做表名。否则要将其中的特殊符号:改为_。
tblName=ssid;//表名,由MAC动态生成出来的。
//在前边创建的db中,创建该表tblName,字段:id--主键。ssid-ap名称。level--wifi信号强度
String sql= "create table if not exists "
+tblName
+" ( id integer primary key autoincrement,ssid,level ) ";
//创建该表.表名,由MAC动态生成出来的。
try{
db.execSQL(sql);
}catch(Exception e){
Toast.makeText(MyActivity.this, "创建数据表出错:"+e1.getMessage(), Toast.LENGTH_LONG).show();
}
}//for
}//if
};
//将bcr注册,才能收到扫描结果的消息
this.registerReceiver(bcr, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}
相关解决方案
- fatal error; call to a member function query() on a non-object异常求回答啊 php+sqlite
- 请教j2me wifi 通过socket连接pc服务器,为何无法发送消息到pc端
- 未能加载资料或程序集“System.Data.SQLite”或它的一个依赖。试图加载格式不正确的程序
- SQLite.NET 找不到表, Google 了良久了都不行
- 关于.net中使用system.data.sqlite.dll,一直不太明白是如何实现的
- sqlite。net 一定要装配吗
- sqlite 最新版本的安装文件解决方法
- sqlite 最新版本的安装文件,该怎么解决
- wifi 应用程序的写法解决方案
- wifi 应用程序的写法,该如何处理
- 议下基于 WIFI 能有什么好的网络应用,该如何处理
- WIFI web认证。解决方法
- WIFI web认证。该怎么处理
- ARM板+wifi,板子可ping通下位机,下位机ping不通板子
- smart phone & wifi,该如何解决
- linux+wifi+ap的一些有关问题
- ARM板+wifi,板子可ping通上位机,上位机ping不通板子,该怎么解决
- SQLite TIMESTAMP的一个有关问题
- Sqlite database locked,该怎么处理
- sqlite 的case when 如何写
- sqlite 安插数据出错
- sqlite select操作 但是数据量太大 要等很长时间 会中途取消么
- sqlite java delete 时出现database disk image is malformed解决思路
- sqlite 的源码不是完全开放的?解决方案
- sqlite datetime 比较大小解决方法
- 什么SQL 语句可以获取到 SQLite 数据库中 某张表的列名名称?解决方案
- SQLite 跨库查询,该怎么解决
- sqlite:表新增 check求解,该如何解决
- SQlite 写下数据,损坏数据表
- sqlite 中limit不好用 跟版本有关系么