日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2020-11-10(安卓如何传递数据)

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020-11-10(安卓如何传递数据) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 1breakcase 2breakdefault} 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+”); forint 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(安卓如何传递数据)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。