1.建项目时遇到的问题及解决方案
(1)appcompat-v7兼容
a.创建时主题选择Theme.Holo.Light.时,总会有报错。
报错是由于导入的工程未加入AppCompatandroid.support:appcompat-v7兼容包
b.Eclipse创建Android项目时,会多出一个appcompat_v7的问题;也是兼容的原因。
解决:最小版本选择Android4.0及以上。此时主题问题也解决了!!解决:最小版本选择Android4.0及以上。此时主题问题也解决了!!
(2)区分:应用名,项目名称,包名
(3)ADT与SDK版本
ADT与SDK版本不适配可能导致创建项目时,不会自动在src和layout下生成代码。
解决:在新建工程的时候,不选择Black activity,而是选择Empty activity
(4).xml文件,android:id="@id/getrss"报错,
解决:自动生成ids.xml文件 或者
应该为:android:id="@+id/getrss"
(5)手机模拟器内存目录:mnt/sdcard
Tps数据存入excel中
(6)路径简洁化处理
private final String USER_DIR="songmake";
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File externDir=Environment.getExternalStorageDirectory();
File externDataDir=new File(externDir,USER_DIR);//USER_DIR是之前声明的目录
//上面适合写文件时新建文件夹目录
//如果是读文件,可以如下,继续组合File对象&文件后缀名
File externDataFile=new File(externDataDir,strUser+".txt");
//OR
File externDataFile=new File(externDataDir,"ap_mu.csv");
}
(7)Button启动处理,TextView显示处理
a.TextView显示处理
//先在全局初始化
TextView txtvTime=null;
//在OnCreate()中找到layout的id
txtvTime=(TextView) findViewById(R.id.txtv_time_id);
//再在函数中对其 **txtvTime**进行处理
private final Handler handler = new Handler( ) {...}
//TextView的处理函数有:
setVisibility(View.VISIBLE);
setText();
append();
...
b.Button启动处理
???判断Button是否按下,按下之后颜色发生变化的程序编写(待续)
//在对应的按钮函数中进行处理
//在layout.xml中有如下属性定义按键函数
android:onClick="btnStartClick"
//那么,对应的函数如下
public void btnStartClick(View v) {
int btnId = v.getId();
Button btn = (Button) findViewById(btnId);
String strBtn = btn.getText().toString();
......
}
(8)项目效率极低,运行缓慢
2.类创建,数据处理
- layout界面编辑
- MainActivity编程,OnCreate函数,Button处理函数等等
- 数据处理类编程
- 定位处理类编程
(1)数据处理类编程
目的:处理参考点与测试点数据(RPS&TPS),存入java的ArrayList中
a.需要和存储交互。
内存不需要权限。
外存SD卡需要权限:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
内存路径: data/data/包名文件夹
外存路径: storage/sdcard
利用java项目先确定数据处理是否正确?!方便调试,若调试正确,再移植到Android项目中~
代码如下:
ArrayList<ArrayList<Double>> rps = new ArrayList<ArrayList<Double>>();
File file = new File("D:/file/Documents/IndoorPositionAPP/RPS/ap_mu.csv");
//Android项目的路径需要对应修改
FileInputStream fis;
try {
fis = new FileInputStream(file);
BufferedReader bReader =new BufferedReader(new InputStreamReader(fis));
String string;
int i=0;
while ((string = bReader.readLine()) != null){
String[] strings = string.split(",");
ArrayList<Double> rp = new ArrayList<>();
for(String s:strings)
{
rp.add(Double.parseDouble(s));
}
i++;
System.out.println("第"+i+"行:");
System.out.println(rp);
System.out.println();
rps.add(rp);
}
bReader.close();
} catch (Exception e) {
e.printStackTrace();
}
(2)定位处理类编程
目的:将一个测试点与所有参考点匹配,确定定位
只是想粗略的理一下顺序,第一次用MarkDown画流程图
a.采用最强信号原则对TP_RSS进行排序
public static ArrayList<Integer> mySort(ArrayList<Double> TP)
//数组TP降序排列,并返回对应的下标数组,已将RSS=-100的数从数组中剔除掉了
{
ArrayList<Integer> index = new ArrayList<>();
HashMap<Integer, Double> map = new HashMap<>();
for(int i=0;i<TP.size();i++)
{
map.put(i, TP.get(i));
}
Collections.sort(TP);
Collections.reverse(TP);
for(int i=0;i<TP.size()&&TP.get(i)!=-100;i++)
{
for (Map.Entry<Integer, Double> mEntry : map.entrySet()) {
if(mEntry.getValue().equals(TP.get(i)))
{
index.add(mEntry.getKey());
mEntry.setValue(0.0);
break;
}
}
}
// TP.subList(0, index.size()); //想只保留最强信号原则下对应长度的信号,结果没成功
// TP.removeRange(index.size(),TP.size());
return index;
}
b.计算TP与所有RPS的相似度,存入sim
public static ArrayList<Double> getSim(ArrayList<Double> TP, ArrayList<ArrayList<Double>> RPS) {
//计算单个测试点与各个参考点的相似度,存入数组返回
ArrayList<Double> sim = new ArrayList<>();
int K = 1;
int M = 40;
ArrayList<Integer> index = new ArrayList<Integer>(); //初始化单个测试点对应的下标,后面进行排序
index = mySort(TP);
int L = index.size();
if (M>L) {
M = L;
}
// ArrayList<Double> rp = new ArrayList<Double>();
for (int j = 0; j < RPS.size(); j++) {
double sum = 0;
double rp = 0;
// System.out.println("排序后的------参考点的RSS:");
for (int i = 0; i < L; i++) {
// rp.add(RPS.get(j).get(index.get(i)));
rp = RPS.get(j).get(index.get(i));
// System.out.print(rp+",");
sum += Math.pow((rp-TP.get(i)), 2);
}
// System.out.println();
sim.add(Math.pow(sum,0.5)/M);
}
return sim;
}
待续。。。