1.从文件读取 保存文件的路径使用api去获取

a.getCacheDir();获取/data/data/包名/Cache这个路径
b.getFilesDir();获取/data/data/包名/files这个路径
c.openFileInput(“文件名”)操作getFiles()目录下的文件,返回一个输入流FileInutStream
d.openFileOutput(“文件名”,mode)操作getFilesDir()目录下的文件,返回一个输出流 FileOutputStream
e.Environment.gettexternalStorageDirectory()获取sd卡路径

2.从sharedprefererced中获取(只能存6种类型:int boolean long float String set)
获取Sharepreferences对象

Sharepreferences sp=getSharedPreferences("info",MODE_PRIVATE)
通过SharedPreferences获取缓存的数据
String username =sp.getSring(“username”,“”)
String  pwd=sp.getSring("pwd","")
boolean isSave=sp.getBoolean(“isSave”,false)

获取sp的Editor对象,通过Editor保存用户名和密码

Editor edit=sp.edit()
edit.putSting(“username”,username)
edit.putSting(“pwd”,pwd)
edit.putBoolean(“isSave”,true)
只有调用了commit提交之后修改才会生效
edit.commit()

3.从数据库中获取
第一步 写一个类创建SQLiteOpenHelper

public   MyOpenHelper(Context context)
{           //上下文
//第二个参数,要操作的数据库文件的名字,如果传null会创建一个内存中的数据库
//第三个参数,游标工厂,通过这个游标工厂可以创建一个cursor  ,cursor跟JDBC中的ResultSet作用是一样的
//通过sql查询之后,返回的结果集,这个参数如果传null,就用默认的游标工厂
//第四个参数  数据库的版本号,版本号从1开始
super(context,“itehal.db”,null,1)
//TODO Auto-generated constructor stub
}
public   MyOpener(Context context,String  name,CursorFactory factory,int version)
{           super(context,name,factory,version)
//TODO Auto-generated constructor   stub
}public void        onCreat(SQLiteDatabase db)
{       //当数据库文件第一次被创建时会调用这个方法,在这个方法中适合做表的创建和初始化操作
//sqlite中一般id字段都用_id来表示
//sqlite特点  存的所有数据都是字符串
db.execSQL(“create   table   info(_id integer primary key autoincrement,name   varchar(20),phone  varchar(20))”)
}
public   void    onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
{   //当数据库需要升级的时候会走这个方法,如何判断升级?通过版本号,如果版本号变大了,name就onUpgrade
//在这个方法中需要做的是 修改表的结构  或者直接添加新的表,或者删除表
//db.exeSQL(“alter   table   info    add age integer”)
//oldVersion 和newVersion的作痛,判断究竟是从哪个版本升级上来的,根据不同的版本可能会有不同的而处理
switch(oldVersion)
{   case 1:
break;
case 2:
break;
default:
}
public   void onDowngrade(SQLiteDatabase  db,int oldversion,int newsion)
{   //super.onDowngrade(db,oldversion,newsion)
如果不注释super,那么当降级时会产生报错,注释super后,在版本降级后,我们可以进行相应的操作
}
}

第二步 创建SQLiteOpenHelper对象, 获得sqliteDataBase通过

SQLiteDataBase执行相应的方法
public  class   Mainactivity    extends Activity{private MyOpenHelper  openhelper;
private SQLiteDatabase  database;protected   void    onCreate(Bundle  saveInstanceState)
{   super.onCreat(savedInstanceState);
setContentenView(R.layout.activity_main);
database=openHelper.getReadableDatabase();
databese=openHelper.getWriteableDatabase();
}
public  void    insert(View v){//insert  into  info(name,phone)values(“小涛”,“116463834838”)
database.execSQL(insert  into    info(name,phone)values(“小涛”,“116463834838”))//这方法没返回值,无法获得执行的状态(但是下面谷歌封装好的api都有返回值,相对来讲,谷歌封装效率差些,sql语句使用也更加的被限制)
database.execSQL(insert  into    info(name,phone)values(“小刘”,“1123433834838”))
}public void    updata(View v){database.execSQL("update  into set phone="1354343135"where name="小贾" "));
}
public  void    delete(View v){database.execSQL("delete  from info    where name="小贾" "));
}public void query(View v){Cursor  cursor=database.rawQuery(“select  *  from indo”,null)
while(cursor.moveToNext()){String  temp=cursor.getString(cursor.getColumnIndex(“phone”));
//Log.d(“result”,“temp+”);
for(int i=0;i<cursor.getColunmnCount();i++)
{String result=cursor.getString(i);
Log.d(“result”,“temp+”);
}
}
database.close();
}public  void insert1(View v){ContentValues   values=new ContentValues();
//key就是要插入的列的名字  value就是要插入的具体的值(列的索引是从0开始)
values.put(“name”,“王五”);
values.put(“phone”,“15555555555”);
//insert into info (name,phone )  values(“王五”,“564464654”)
//insert  into info (name )values(null);
//第一个参数  数据要插入的表的名字
//第二个参数  String类型的参值,避免出现insert into info(name ) values(null);这种sql语句
//如果确定不会有问题可以传null或者传一个可以接受null值的列名
//第三个参数,ContentValues内部保存了一个map,通过key-value键值对的形式把要插入的数据封装起来
//values.put(“name”,“王五”)
long result=database.insert(“info”,“name”,values)(如果result 等于-1,则说明执行语句失败);
}
public  void    updata1(View v){ContentValues values=new ContentValues();
//database.execSQL("update  into   set phone="1354343135"where name="小贾" "));
//第一个参数表名
//第二个参数  要修改的信息,以键值对的形式保存
/第三个参数  where条件  name=? 注意where不用写,只需要写where后面的内容
//第四个参数  where条件中   ?具体的值,用String数组来保存,如果有多个条件,数组中的数据要对应起来
//返回值   就是更改究竟影响到几行数据
int update=database.update(“info”,values,“value=?”,new String[  ]{"王五"});
Toast.makeText(this,“修改了”+updata+“行数据”,Toast.LENGTH_SHORT).show();
}public void  delete1(View v){//database.execSQL("delete  from info  where name="小贾" "))
//第一个参数表名
//第二个参数,where条件,name=?,注意where不用写,只需要写where后面的内容
//第三个参数, where条件中    ?具体的值,用String数组来保存,如果有多个条件,数组中的数据要对应起来
//返回值, 如果第二个和第三个参数不为空,则返回值为具体删除的记录数,如果没有传第二个和第三个参数,这说明要删除全部的数据,如果删除成功返回
int delete=database.delete(“info”,“value=?”,new String[  ]{"王五"});
Toast.makeText(this,“删除了”+delete+“条数据”,Toast.LENGTH_SHORT).show();
}   public  void  query1(View v){//database.execSQL("select  name,phone,from info where name="小贾" "))
//第一个参数表名
//第二个参数,要查询的列名,用String数组来表示,如果是select *则传入一个null
//第三个参数,要查询的条件,where 语句,name=?
//第四个参数,条件语句的具体的值,用String数组来表示
//第五个参数,groupBy分组查询语句
//第六个参数,groupBy的时候要使用的条件语句having
//第七个条件,排序
Cursor  cursor  =database.query(“info”,null,null,null,null,null,null)
while(cursor.moveToNext())
{   String string=cursor.getSting(cursor.getColumnIndex(“name”));
Log.d(“API”,string)
}
cursor.close();
}
protected void onDestroy(){super.onDestroy();
database.close();
}
}

4.通过网络获取(通过网络加载数据的代码基本会写在单独的代码中,避免oncreat方法代码过多)
注:联网操作需要开子线程,不能在主线程做联网的操作(不能在子线程更新UI)

public   void click(View  v){//获取url
final   String path=et.url.getText().toString();
new thread(){public  void run(){try{
//把url字符串转换成URL对象
url=new URL(path);
//通过URL对象,创建一个HttpURLConnection
Connection=(HttpURLConnection)url.openConnection();
//设置请求的参数,设置请求方法
connection.setConnection(1000000);
int response=Connection.getResponseCode();//获得响应码
if(response==200)
{//通过Connection获取一个流
InputStream inputstream=Connection.getInputstream();
//从流中读取数据
final   String result=Utils.getStringFromStream(inputstream);
//获取到数据通过handler发消息通过handler更新UI
}
else{//网络连接有问题
}
}
catch(Exception e){e.printStackTrace();
}
finally{Connection.disconnect();
}
};
}.start();
}注意:子线程不能修改UI
handler机制写法,通过handler,解决线程间通信的问题
runOnUiTHread(Runnable);如果业务逻辑简单,也可以用这个方法在唉子线程更新UIpublic  class  Mainactivity2 extends Activity{private static  final   int GET_DATA=1;
private TextView tv_text;
//第一步 ,创建一个handler对象
private  Handler  handler =new Handler(){//第三步   通过msg.waht区分消息,获得参数在主线程  设置界面
//3.1通过msg.what区分消息
switch(msg.what){case GET_DATA:
//3.2通过msg.obj获取传递的参数
///3.3修改界面
tv.text.setText(result);
break;
}
};
};protected  void  onCreate(Bundle saveInstanceState)
{   super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
tv_text=(TextView)findViewByld(R.id.tv_text);
//联网获取数据
initData();
}private    void initData(){new Thread(){public  void    run(){//联网获取数据…………
String  result=“联网获得的数据”;
//第二步  获取到数据后创建message,通过handle来发送消息
//2.1获取消息对象
Message msg=Message.obtain();
//2.2设置msg.what用来区分不同的消息
msg.what=GET_WHAT;
//2.3如果有参数需要携带,通过msg.obj来传递参数
msg.obj=result;
//2.4获取handler发送消息
handler.sendMessage(msg);
};}.start();}
}

5.从上个activity中获取
//找到intent获取数据

Intent intent=getIntent();

//通过intent的getXXXExtra方法,获取上个页面传递的数据

String   name=intent.getStringExtra(“name”);
boolean inFemale =intent.getBooleanExtra(“isFemale”,false);

2020-11-10(安卓如何传递数据)相关推荐

  1. 2020.11.28-29全国高校大数据专业教学研讨与教师培训会议

    好消息:"Python小屋"编程比赛正式开始 推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情: ...

  2. 2020.11.10课堂笔记(Apache Spark 分布式计算原理)

    Spark WordCount运行原理 一.RDD的依赖关系 为什么需要划分Stage 数据本地化- 移动计算,而不是移动数据 保证一个Stage内不会发生数据移动 Lineage:血统.遗传 RDD ...

  3. 输入一会整数,输出所有质素因子2020.11.10

    //输入一会整数,输出所有质素因子 #include <stdio.h> int main() { int num, i; scanf("%d", &num); ...

  4. 2020.11.10丨BSA基础知识及产品介绍

    产品介绍 BSA产品介绍 1.1研究目的 基因定位 1.2基本概念 Bulked Segregant Analysis,分离群体分组分析法 定义: 在性状分离的遗传群体中 ,选择表型极端差异个体将其D ...

  5. QIIME 2教程. 10数据导出Exporting data(2020.11)

    文章目录 QIIME 2用户文档. 10数据导出 导出特征表 导出进化树 导出与提取 译者简介 Reference 猜你喜欢 写在后面 QIIME 2用户文档. 10数据导出 https://docs ...

  6. QIIME 2教程. 12数据筛选Filtering data(2020.11)

    文章目录 QIIME 2用户文档. 12数据筛选 下载实验相关数据 过滤特征表 按数据量过滤 偶然因素的过滤 基于标识符的过滤 基于元数据的筛选 基于物种过滤表和序列 过滤序列 过滤距离矩阵 译者简介 ...

  7. 安卓学习笔记07:事件处理、窗口跳转与传递数据

    文章目录 零.学习目标 一.三个基本控件 1.标签控件(TextView) 2.编辑框控件(EditText) 3.按钮控件(Button) 二.安卓事件处理机制 (一)安卓事件处理概述 (二)安卓事 ...

  8. QIIME 2教程. 14数据评估和质控q2-quality-control(2020.11)

    文章目录 数据评估和质控`q2-quality-control` 下载数据 基于对齐过滤序列 质量评估已知组成的样品 评估序列质量 译者简介 Reference 猜你喜欢 写在后面 数据评估和质控q2 ...

  9. QIIME 2教程. 09数据导入Importing data(2020.11)

    文章目录 QIIME 2用户文档. 9数据导入 导入带质量值的FASTQ测序数据 EMP标准混样单端数据 EMP混样双端数据 Casava1.8单端混样数据 Casava 1.8双端拆分后数据 **F ...

最新文章

  1. 从各方面数据来看《猎场》为什么收官后热度依旧
  2. 给定一个用户,获取其密码警告期限;而后判断用户密码使用期限是否已经小于警告期限...
  3. 还不起9亿?有人建议为范冰冰发行一款私募ABS产品融资!
  4. nullnullicon 小图标
  5. Linux平台中使用PHP让word转pdf
  6. GitLab推动基于Kubernetes的Auto DevOps更新
  7. HDU_1198 Farm Irrigation(并查集)
  8. csdn 修改博客皮肤
  9. phpStudy点击phpadmin出404窗口的解决办法
  10. html类选择器使用在什么场景,你需掌握的CSS知识都在这了(长文建议收藏,文末有福利)...
  11. JScrollPane设置滚动条自动到最下(或最右)
  12. 游戏脚本开发思路总结
  13. 基于Egteks mPower1203仪器和KEYSIGHT N6705仪器的一款智能穿戴产品的低功耗电流测试评估
  14. 江苏计算机类事业单位真题解析,2012年江苏事业单位考试综合计算机类真题及解析(7)...
  15. Java中的包(package)详情解释
  16. 页面关键字实时搜索查询案例
  17. 致远a8-v5-6.0协同管理软件_Batteries for Mac(电池电量管理软件) v2.0
  18. 亲,你寄的 U盘不是 4G 的哟~
  19. Windows10 此用户无法登录,因为该账户当前已被禁用
  20. unity中实现3d物体的颜色随时间渐渐消失

热门文章

  1. Python之 sklearn:sklearn.preprocessing中的StandardScaler函数的简介及使用方法之详细攻略
  2. 成功解决schedule.ScheduleValueError: Invalid time format
  3. 成功解决.ReadTimeoutError: HTTPSConnectionPool(host=‘pypi.tuna.tsinghua.edu.cn‘, port=443): Read timed o
  4. DL之IDE:深度学习之计算机视觉开发环境搭建的详细流程(Ubuntu16.04+cuda9.0+cuDNN7.4.2+tensorflow_gpu)
  5. AI:人工智能概念之机器学习ML、深度学习DL、数据挖掘、知识发现、模式识别等重要领域之间比较关系结构图之详细攻略
  6. BC:带你温习并解读《中国区块链技术和应用发展白皮书》—概述
  7. 【BZOJ5470】【FJOI2018】—所罗门王的宝藏(BFS)
  8. Linux文件属性和权限
  9. PAT——1022. D进制的A+B
  10. echarts用法配置