android实现二维
❶ android 能不能在array文件里定义二维数组而不单单是一维数组
public class TArray{
public static void main(String[] args){
int N = 3; //假设你要3行2列。
int array[][] = new int[N][2]; //定义N行2列数组。
int x1 = 1; //假定3组xy值。
int y1 = 2;
int x2 = 3;
int y2 = 4;
int x3 = 5;
int y3 = 6;
//数组的第一个元素下标是0,最后一个元素的下标是(数组长度-1)
array[0][0]=x1; //x1赋值给第0行第0列
array[0][1]=y1; //y1赋值给第0行第1列
array[1][0]=x2; //x2赋值给第1行第0列
array[1][0]=y2; //y2赋值给第1行第1列
array[2][0]=x3; //x3赋值给第2行第0列
array[2][1]=y3; //y3赋值给第2行第1列
/*
首先要理解一维数组,就是一串相同类型的变量串,如果是整形数组,那么肉串上所有的肉块都是整形的。为了区分肉串上的不同肉块,引入下标,就是你手里的羊肉串的第几块肉。当然第一块肉是0号,数组下标从0开始。
*/
/*
然后是二维数组,java中不承认二维数组,二维数组在Java中实际是变量类型是数组的元素构成的数组,比如你手中有一把羊肉串,每一串都有相同数量的肉块,并且所有元素都是肉块,也就是整形二维数组中,每个元素都是整形的。可以把它看做array[0]是一个一位数组的名字,而后面紧跟的[0]是这个一维数组的下标。这样就理解了。
*/
}
}
为避免糊涂,没有使用键盘输入的方式。
应该够了。
❷ android怎样生成条码和二维码
一、问题描述 在开发中需要将信息转换为二维码存储并要求带有公司的logo,我们知道Google的Zxing开源项目就很好的帮助我们实现条形码、二维码的生成和解析,但带有logo的官网并没有提供demo,下面就通过实例看看如何实现以及Zxing的使用。 二、案例介绍 1、案例运行效果 2、案例准备工作 在项目中加入jar,只需加入core/zxing/zxing/ 三、Zxing主要组件 1、BarcodeFormat 定义了不同的二进制编码方式,取值如下 EAN_13条形码,共计13位代码,比较常见,如商品上的包装上的都是这种条形码 CODE_QR二维码(矩阵码),比条形码存在更多信息,当下比较流行 CODE_128条形码 可表示可表示从 ASCII 0 到ASCII 127 共128个字符,用于企业管理,生产流程控制 CODE_39条形码,编制简单只接受如下43个字符 2、MultiFormatWriter 主要包含一个 encode()方法,可实现产生编码(条形、二维码) BitMatrix encode(String contents, BarcodeFormat format, int width, int height,Hashtable hints)方法 参数: contents:要编码的内容 format:编码格式(条形、二维) width,height:生成码的大小 hints:包含EncodeHintType(编码提示类型)信息的集合,主要设置字符编码,比如支持汉字的utf-8,如下: Hashtable hst = new Hashtable(); hst.put(EncodeHintType.CHARACTER_SET, “UTF-8″); 返回值:BitMatrix 二维矩阵点 3、BitMatrix BitMatrix :表现为一个二维矩阵,x表示列的位置,y表示行的位置,循序从左上角开始,一列一列排列(先x后y) 主要方法: getWidth():返回矩阵的宽度 getHeight():返回矩阵的高度 boolean get(x,y) :非常重要的方法,实现根据给定的x,y判断该位置是否有黑块 在产生二维码的应用中就是通过这个方法进行判断,然后把有黑块的点记录下来,使用Bitmap的setPixels()方法生成图形,详解案例的createCode()方法中的代码 四、完整代码 public class MainActivity extends Activity { private EditText etCompany; private EditText etPhone; private EditText etEmail; private EditText etWeb; private Bitmap logo; private static final int IMAGE_HALFWIDTH = 40;//宽度值,影响中间图片大小 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得资源图片,可改成获取本地图片或拍照获取图片 logo=BitmapFactory.decodeResource(super.getResources(),R.drawable.y014); etCompany =(EditText) findViewById(R.id.etCompany); etPhone=(EditText) findViewById(R.id.etPhone); etEmail =(EditText) findViewById(R.id.etEmail); etWeb =(EditText) findViewById(R.id.etWeb); findViewById(R.id.but).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String company=etCompany.getText().toString().trim() ; String phone =etPhone .getText().toString().trim() ; String email = etEmail.getText().toString().trim() ; String web = etWeb.getText().toString().trim() ; //二维码中包含的文本信息 String contents= "BEGIN:VCARD/nVERSION:3.0/nORG:"+company+"/nTEL:"+phone+"/nURL:"+web+"/nEMAIL:"+email+"/nEND:VCARD"; try { //调用方法createCode生成二维码 Bitmap bm=createCode(contents,logo,BarcodeFormat.QR_CODE); ImageView img=(ImageView)findViewById(R.id.imgCode) ; //将二维码在界面中显示 img.setImageBitmap(bm); } catch (WriterException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } /** * 生成二维码 * @param string 二维码中包含的文本信息 * @param mBitmap logo图片 * @param format 编码格式 * @return Bitmap 位图 * @throws WriterException */ public Bitmap createCode(String string,Bitmap mBitmap, BarcodeFormat format) throws WriterException { Matrix m = new Matrix(); float sx = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getWidth(); float sy = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getHeight(); m.setScale(sx, sy);//设置缩放信息 //将logo图片按martix设置的信息缩放 mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), m, false); MultiFormatWriter writer = new MultiFormatWriter(); Hashtable hst = new Hashtable(); hst.put(EncodeHintType.CHARACTER_SET, "UTF-8");//设置字符编码 BitMatrix matrix = writer.encode(string, format, 400, 400, hst);//生成二维码矩阵信息 int width = matrix.getWidth();//矩阵高度 int height = matrix.getHeight();//矩阵宽度 int halfW = width / 2; int halfH = height / 2; int[] pixels = new int[width * height];//定义数组长度为矩阵高度*矩阵宽度,用于记录矩阵中像素信息 for (int y = 0; y < height; y++) {//从行开始迭代矩阵 for (int x = 0; x < width; x++) {//迭代列 if (x > halfW - IMAGE_HALFWIDTH && x < halfW + IMAGE_HALFWIDTH && y > halfH - IMAGE_HALFWIDTH && y < halfH + IMAGE_HALFWIDTH) {//该位置用于存放图片信息 //记录图片每个像素信息 pixels[y * width + x] = mBitmap.getPixel(x - halfW + IMAGE_HALFWIDTH, y - halfH + IMAGE_HALFWIDTH); } else { if (matrix.get(x, y)) {//如果有黑块点,记录信息 pixels[y * width + x] = 0xff000000;//记录黑块信息 } } } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); // 通过像素数组生成bitmap bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } }
❸ android用java处理二维json数组并放入listview中。
用谷歌提供的gson包,或者是阿里巴巴提供的fastjson包,方便快捷。
把javabean的里面的变量的声明和json关键词一样。
比如{"id":"30","title":"��������","num":"3","author":"���B��","lpostt":"2015-01-07 19:33:50"}
javabean就为
publicclassBean{
privateStringid;
privateStringtitle;
privateStringnum;
privateStringauthor;
privateStringlpostt;
...//get和set我就不写了
}
fastjson包使用:
importcom.alibaba.fastjson.JSONObject;
...
JSONObjectobject=JSON.parseObject(String);//这是获取一个JSONObject对象使用方法和org.json.JSONObject差不多
//Bean中的变量名必须和返回过来的JSON串里面的参数一样,不一样的变量名将不会有数据。多了或者少了不会有影响。
List<Bean>beanList=JSON.parseArray(String,Bean.class);//JSON数组,解析成一个list
Beanbean=JSON.parseObject(String,Bean.class)//JSON数据,解析成一个对象
如果JSON中的元素还有JSON数据,比如{“id”:{"data","123"}}
publicclassBean{
privateDataid;
...//省略get和set
}
//下面是另一个javabean文件
publicclassData{
privateStringdata;
...//省略get和set
}
解析的办法和上面一样。是json数组就在javabean里面定义list。
使用Gson包和fastjson类似,但是还是有区别
Gsongson=newGson();//需要先实例化一个Gson对象
Beanbean=gson.fromJson(String,Bean.class);//JSON数据,返回一个Bean对象
List<Bean>beanList=gson.fromJson(String,newTypeToken<List<Bean>>(){}.getType());//JSON数组,返回一个List对象
最后,当你将你的JSON数据解析成了List,难道放入ListView中不就轻而易举了吗?
不知道为什么附件不能上传,你就只能自行下载了。搜一下就出来了
❹ 二维数组 安卓版怎么赋值
1,创建二维数组语句:int[][] array = new int[3][3];
2,直接创建二维数组并赋值语句:int[][] array ={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}} ;
二维数组,也可以理解为用一维数组保存的元素为一维数组。对于三维数组,等等,都可以这样划分。不过我们在编程中使用三维以上的数组比较少。因为那样使用起来非常不方便。下面我们来学习二维数组的声明。其声明同一位数组一样,可以先声明再分配内存,也可以声明时分配内存
第一种,先声明再分配内存的方式
数组声明: 数据类型 数组名[][];
内存分配: 数组名 = new 数据类型[行的个数][列的个数];
举例: 假如我们需要统计一个象棋上放的是黑棋还是白棋。这时,我们可以建立一个坐标,即以象棋盘的两边建立坐标轴。这时,我们可以这样定义这个二维数组:
声明数组: int Chess[][];
内存分配 Chess= new int[64][64];
第二种,即声明时即分配内存的方式。
使用格式是: 数据类型 数组名[][] =new 数据类型 [行的个数][列的个数];
使用上个步骤中的例子,我们可以将数组的声明和分配内存写成以下方式:
声明即分配内存:int Chess[][] = new int[64][64];
二维数组的赋值,同一维数组类似。只是在{}中的每个元素又是每个一维数组。如下格式:
数据类型 数据名[][]={
{值1,值2,值3,值4 }, //第一行数据
{值5,值6,值7,值8}, //第二行数据
...,
}
二维数组中,可以有列数不相等的数组。即每一行的列数不同时。我们需要对每一行进行赋值。
对于这两种二维数组。我们分别来进行分别举例进行赋值。第一种是:列数相同的数组
其赋值格式如下:
String ClassRoom[][]={
{"小王","小李","小张"},
{"小红","小明","小花"},
}
即第一行的人数和第二行的人数相同。
第二种:即列数不相等的数组的赋值格式如下:
String ClassRoom[][]={
{"小王","小李","小张"},
{"小红","小明","小花"},
{"小雨","小风","小平","小雷"},
{"小单"}
}
看上述例子。对于不同的行,其相应的列数是不同的。
❺ Android Activity间传二维数组问题
1楼说的很对,在另一个Activity接收,我再补充一下,
String[] strArray = getIntent().getSerializableExtra("intArray")
也可以用这种方式传递对象、map集合等,传递对象的实体类要实现系列化。接受就用上面的方法,传过来的是什么对象,就强转一下就好了。
❻ android怎样将得到的注册信息(账号和密码)写入到一个二维数组
代码如下
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.content.SharedPreferences;
importandroid.content.SharedPreferences.Editor;
importandroid.text.TextUtils;
importandroid.view.Menu;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.CheckBox;
importandroid.widget.EditText;
importandroid.widget.Toast;
/***
*
*1.创建一个SharedPreferences
*2.初始化SharedPreferences参数1sp的文件名称参数2sp的保存模式
*3.向sp里面保存数据首先获取一个文本编辑器Editor
*4.存储完毕数据记得执行commint()保存数据
*5.读取数据sp.getString()sp.getInt();
*/
{
privateEditTextet_qq;
privateEditTextet_password;
privateCheckBoxcb_remeber_pwd;
privateButtonbt_ok;
/**
*android系统下用于数据存储的一个方便的API
*/
privateSharedPreferencessp;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//完成sp的初始化。
sp=getSharedPreferences("config",MODE_PRIVATE);
et_qq=(EditText)findViewById(R.id.et_qq);
et_password=(EditText)findViewById(R.id.et_password);
cb_remeber_pwd=(CheckBox)findViewById(R.id.cb_remeber_pwd);
//获取sp里面存储的数据
StringsavedQQ=sp.getString("qq","");
StringsavedPassword=sp.getString("password","");
et_qq.setText(savedQQ);
et_password.setText(savedPassword);
bt_ok=(Button)findViewById(R.id.bt_ok);
//给按钮注册一个点击事件。
bt_ok.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Stringqq=et_qq.getText().toString();
Stringpassword=et_password.getText().toString();
if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(password)){
Toast.makeText(getApplicationContext(),
"对不起,qq号"+"或者密码不能为空",0).show();
}else{
//检查用户是否勾选了记住密码的选项。
if(cb_remeber_pwd.isChecked()){
//说明勾选框被选中了。把用户名和密码给记录下来
//获取到一个参数文件的编辑器。
Editoreditor=sp.edit();
editor.putString("qq",qq);
editor.putString("password",MD5utils.encode(password));
//把数据给保存到sp里面
editor.commit();
Toast.makeText(getApplicationContext(),"用户信息已经保存",1)
.show();
}
}
}
});
}
}
packagecom.itheima.qqlogin;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importandroid.os.Message;
publicclassMD5utils{
/**
*md5加密的工具类
*
*@parampassword
*@return
*/
publicstaticStringencode(Stringpassword){
try{
MessageDigestdigest=MessageDigest.getInstance("md5");
byte[]results=digest.digest(password.getBytes());
StringBuildersb=newStringBuilder();
for(byteb:results){
intnumber=b&0xff;
Stringhex=Integer.toHexString(number);
if(hex.length()==1){
sb.append("0");
}
sb.append(hex);
}
returnsb.toString();
}catch(Exceptione){
e.printStackTrace();
return"";
}
}
}
❼ android 怎么用Intent传递二维数组
1.声明一个二维数组.
2.写一个for循环,将一维数组放到intent的bundle里.
起始就是往bundle里存放了多个一维数组而已.
final String data[][] = new String[][] {xxxxxxxxxxxxxxxx};
Bundle bundle = new Bundle();
for (int i = 0; i < data.lenth; i++)
bundle.putStringArray(ARRAY_INDEX + i, data[i]);
❽ android 二维码扫描的原理是什么
你好!具体的我不懂怎么讲,就相当于商品的身份证,二维码不容易仿冒。你看看下面的介绍吧。。。网路找到的。
什么是条码技术?
条形码,简称“条码”,是由一组黑白相间、宽度不同的条状符号组成。
条码技术是研究如何把计算机所需要的数据表示成条码形式,和如何将条码表示的数据和符号转变为计算机可以自动采集、识别的数据。因而,条码技术就包括从编码到制作、识读、处理等一系列技术。
根据不同的编码规则,提出的编码方案已经有多达四十余种,目前应用最为广泛的有:交叉二五码、三九码、UPC码、EAN码、128码等。
从印制条形码的材料、颜色分类,可分黑白条形码、彩色条形码、发光条形码(荧光条形码、磷光条形码)和磁性条形码等。
近年来又出现了按矩阵方式或堆栈方式排列信息的二维条形码。
我国的适用标准:一维条码通用商品条码是与EAN码等效,二维条码是与PDF417兼容的码制。
条形码有什么优点?
A.输入速度快:与键盘输入相比,条码输入的速度是键盘输入的5倍,并且能实现"即时数据输入"。
B.可靠性高:键盘输入数据出错率为三百分之一,利用光学字符识别技术出错率为万分之一,而采用条码技术误码率低于百万分之一。
C.采集信息量大:利用传统的一维条码一次可采集几十位字符的信息,二维条码更可以携带数千个字符的信息,并有一定的自动纠错能力。
D.灵活实用:条码标识既可以作为一种识别手段单独使用,也可以和有关识别设备组成一个系统实现自动化识别,还可以和其他控制设备联接起来实现自动化管理。
另外,条码标签易于制作,对设备和材料没有特殊要求,识别设备操作容易,不需要特殊培训,且设备也相对便宜。
条形码的应用领域
仓库管理系统(商品、库位标识)
在工业中的应用(零部件标识,过程控制,信息传递等)
办公室自动化管理(固定资产管理,门卫、考勤管理等)
还可以用于如,图书管理、商场管理、血库管理、邮电管理、海关报关单管理等等。
一维条码的结构与组成
我国采用的一维条码是通用商品条码,采用EAN条码结构。EAN条码是国际上通用的通用商品代码。我国主版是由13位数字及相应的条码符号组成,在较小的商品上也采用8位数字码及其相应的条码符号。
每个条码的组成可分为:
1.前缀码。由三位数字组成,是国家的代码,我国为690,是国际物品编码会统一决定的。
2.制造厂商代码。由四位数字组成,我国物品编码中心统一分配并统一注册,一厂一码。
3商品代码。由五位数字组成,表示每个制造厂商的商品,由厂商确定,可标识十万种商品。
4.校验码。由一位数字组成,用以校验前面各码的正误。
一维条码的特点
条形码符号图形结构简单;
每个条形码字符由一定的条符组成,占有一定的宽度和印制面积;
每种编码方案均有自己的字符集;
每种编码方案与对应的阅读装置的性能要求密切配合。一维条码的容量多数一维条码所能表示的字符集不过是10个数字,26个英文字母及一些特殊字符。条码字符集最大的Code l28条码,所能表示的字符个数也不过是128个ASCII符。什么是二维条码?二维条码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息。二维条码可以分为堆叠式二维条码和矩阵式二维条码。堆叠式二维条码形态上是由多行短截的一维条码堆叠而成;矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1”,用“空”表示二进制“0”,由“点”和“空”的排列组成代码。堆叠式二维条码,有代表性的包括PDF417、Code 49、Code 16K等。矩阵式二维条码有代表性的是Code one、Aztec、Date Matrix、QR码等。二维条码的特点1.高密度编码,信息容量大:可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。2.编码范围广:该条码可以把图片、声音、文字、签字、指纹等可以数字化的信息进行编码,用条码表示出来;可以表示多种语言文字;可表示图像数据。3.容错能力强,具有纠错功能:这使得二维条码因穿孔、污损等引起局部损坏时,照样可以正确得到识读,损毁面积达50%仍可恢复信息。4.译码可靠性高:它比普通条码译码错误率百万分之二要低得多,误码率不超过千万分之一。5.可引入加密措施:保密性、防伪性好6.成本低,易制作,持久耐用7.条码符号形状、尺寸大小比例可变8.二维条码可以使用激光或CCD阅读器识读。
❾ Android二维码识别源码,可有多种实现方式
这里简单介绍一下ZXing库。ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。该项目可实现的条形码编码和解码。目前支持以下格式:UPC-A,UPC-E、EAN-8,EAN-13、39码、93码。ZXing是个很经典的条码/二维码识别的开源类库,以前在功能机上,就有开发者使用J2ME运用ZXing了,不过要支持JSR-234规范(自动对焦)的手机才能发挥其威力。
下面是ZXing的demo运行,我这里创建了一个二维码,内容是我博客的网址,大伙可以用微信的扫一扫功能,试一下。就可以直接打开我博客。
2、ZXing库主要类
下面给大家介绍一下,ZXing库里面主要的类以及这些类的作用:
CaptureActivity。这个是启动Activity 也就是扫描器。
CaptureActivityHandler 解码处理类,负责调用另外的线程进行解码。
DecodeThread 解码的线程。
com.google.zxing.client.android.camera 包,摄像头控制包。
ViewfinderView 自定义的View,就是我们看见的拍摄时中间的框框了。
3、使用ZXing生成二维码
下面针对二维码生成和解析做个简单介绍,至于详细的使用方法,建议大家还是自己看看源码,使用起来很简单,不过这个开源项目的代码,值得好好看看。首先给出二维码生成的方法:
View Code
上面就是二维码生成的方法接口,如果你只是使用者方法,很简单,只要传入一个URL即可,就像我截图里面一样,传入一个合法的网址即可。或者像现在一些移动APP的推广,把APP下载地址转为二维码,只要扫一下就可以下载相应的APP。这个也是目前比较流行的APP的推广方式。
上面代码做的事情不多,主要是调用ZXing库里面QRCodeWriter().encode的方法对我们传进去的URL进行编码,具体如何编码,这个我这里就不详细说,有兴趣可以看ZXing的源码。文章最后会给出ZXing的源码和例子代码。
4、扫描二维码获取信息
扫描获取二维码信息的工作稍微复杂一些,主要是需要编写Camera的使用,这个跟我们一般使用Camera一样,需要使用Surfaceview作为预览,这一部我这里就不说了,这个应该不是太复杂。对于使用过Camera做预览的朋友,应该是挺简单的事情。获取二维码数据的关键处理是在Camera的自动对焦回调函数哪里,调用ZXing的解码接口。
View Code
这里稍微多说一句,由于解码需要一定时间,所以ZXing的解码调用,都是使用了Handler作为线程通信机制,解码的工作都是放在独立线程里面使用的,如果你直接在主线程解码,恐怕ANR问题是避免不了。
View Code
上面是解码的线程处理不同状态的时候需要注意的地方,我们这里只看获取图像成功的地方,成功获取图片解码的实在DecodeThread里面实现,DecodeThread里面解码成功后,会把数据序列化,然后保存到Bundle里面,我们可以直接通过Bundle的序列化,获取到图片数据。同时会把解码后的结果保存到MSG里面,然后就可以根据实际情况进行处理,例如上面代码,解码成功后,会调用一个处理函数:
View Code
上面就是整个二维码的解码流程,里面因为涉及很多Camera的使用,所以你如果需要使用二维码识别,需要注意一下你的程序需要申请下面的权限,一般的Camera使用以及Camera的自动对焦等。
View Code
5、结语
上面就是生成和识别二维码的关键流程和代码,有兴趣的朋友可以自己查看ZXing的源码,里面有很多图像分析的知识可以学习。具体使用也可以参考我下面给出的Demo。二维码对于现在移动开发来说很是很常用的技术,所以有空可以了解一下,说不定什么时候就用上了。另外,ZXing库除了二维码外,其实对于条形码也是支持的,只是我这里没有介绍。有需要的自己去看看源码即可。
转载
❿ android 怎么把数据库表数据 写入二维数组
这个例子是将数据库中的数据存储到集合中
List<ContactInfo> list = new ArrayList<ContactInfo>();//ContactInfo实体类
sqliteDatabase db = dbOpentHlper.getReadableDatabase();
String sql = "select * from contactinfo";
Cursor cursor = db.rawQuery(sql, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String qq = cursor.getString(cursor.getColumnIndex("qq"));
String msn = cursor.getString(cursor.getColumnIndex("msn"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
list.add(new ContactInfo(id, name, qq, msn, phone));
}