Android学习之数据存储
来源:互联网 发布:vb倒计时显示剩余时间 编辑:程序博客网 时间:2024/06/10 05:01
Android数据存储
1. 主界面XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="数据存储方式" android:textColor="#ff0000" android:textSize="20sp" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClickSP" android:text="SharedPreference存储" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClickIF" android:text="内部文件存储" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClickOF" android:text="外部文件存储" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClickDB" android:text="数据库存储" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClickNW" android:text="网络存储存储" /></LinearLayout>
1.1 主界面Activity
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}// 测试sp存储public void onClickSP(View v) {startActivity(new Intent(this, SpActivity.class));}// 测试手机内部文件存储public void onClickIF(View v) {startActivity(new Intent(this, IFActivity.class));}// 测试手机外部文件存储public void onClickOF(View v) {startActivity(new Intent(this, OFActivity.class));}// 测试Sqlite数据库存储public void onClickDB(View v) {startActivity(new Intent(this, DBActivity.class));}public void onClickNW(View v) {startActivity(new Intent(this, NetworkActivity.class));}}
2. sp存储XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/et_sp_key" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="存储的key" /> <EditText android:id="@+id/et_sp_value" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="存储的value" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="save" android:text="保 存" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="read" android:text="读 取" /> </LinearLayout></LinearLayout>
2.2 sp存储Activity
/** * 测试sp存储的界面 */public class SpActivity extends Activity {private EditText et_sp_key;private EditText et_sp_value;private SharedPreferences sp;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sp);et_sp_key = (EditText) findViewById(R.id.et_sp_key);et_sp_value = (EditText) findViewById(R.id.et_sp_value);//1. 得到sp对象sp = getSharedPreferences("atguigu", Context.MODE_PRIVATE);}public void save(View v) {//2. 得到editor对象Editor edit = sp.edit();//3. 得到输入的key/valueString key = et_sp_key.getText().toString();String value = et_sp_value.getText().toString();//4. 使用editor保存key-valueedit.putString(key, value).commit();//5. 提示Toast.makeText(this, "保存完成!", 0).show();}public void read(View v) {//1. 得到输入的keyString key = et_sp_key.getText().toString();//2. 根据key读取对应的valueString value = sp.getString(key, null);//3. 显示if(value==null) {Toast.makeText(this, "没有找到对应的value", 0).show();} else {et_sp_value.setText(value);}}}
3. 手机内部文件存储XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:text="1. 将asserts下的logo.png保存到手机内部\n2. 读取手机内部图片文件显示" android:textColor="#ff0000" android:textSize="15sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/btn_if_save" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="save" android:text="保 存" /> <Button android:id="@+id/btn_if_read" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="read" android:text="读 取" /> </LinearLayout> <ImageView android:id="@+id/iv_if" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /></LinearLayout>
3.2 手机内部文件存储Activity
public class IFActivity extends Activity {private ImageView iv_if;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_if);iv_if = (ImageView) findViewById(R.id.iv_if);}public void save(View v) throws IOException {//1. 得到InputStream-->读取assets下的logo.png//得到AssetManager AssetManager manager = getAssets();//读取文件InputStream is = manager.open("logo.png");//2. 得到OutputStream-->/data/data/packageName/files/logo.pngFileOutputStream fos = openFileOutput("logo.png", Context.MODE_PRIVATE);//3. 边读边写byte[] buffer = new byte[1024];int len = -1;while((len=is.read(buffer))!=-1) {fos.write(buffer, 0, len);}fos.close();is.close();//4. 提示Toast.makeText(this, "保存完成", 0).show();}public void read(View v) {// /data/data/packageName/files/logo.png//1. 得到图片文件的路径// /data/data/packageName/filesString filesPath = getFilesDir().getAbsolutePath();String imagePath = filesPath+"/logo.png";//2. 读取加载图片文件得到bitmap对象Bitmap bitmap = BitmapFactory.decodeFile(imagePath);//3. 将其设置到imageView中显示iv_if.setImageBitmap(bitmap);}}
4. 手机外部文件存储XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/et_of_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="存储的文件名" /> <EditText android:id="@+id/et_of_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="存储的文件内容" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="save" android:text="保 存" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="read" android:text="读 取" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="save2" android:text="保 存2" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="read2" android:text="读 取2" /> </LinearLayout></LinearLayout>
4.2 手机外部文件存储Activity
public class OFActivity extends Activity {private EditText et_of_name;private EditText et_of_content;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_of);et_of_name = (EditText) findViewById(R.id.et_of_name);et_of_content = (EditText) findViewById(R.id.et_of_content);}public void save(View v) throws IOException {//1. 判断sd卡状态, 如果是挂载的状态才继续, 否则提示if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//2. 读取输入的文件名/内容String fileName = et_of_name.getText().toString();String content = et_of_content.getText().toString();//3. 得到指定文件的OutputStream//1).得到sd卡下的files路径String filesPath = getExternalFilesDir(null).getAbsolutePath();//2).组成完整路径String filePath = filesPath+"/"+fileName;//3). 创建FileOutputStreamFileOutputStream fos = new FileOutputStream(filePath);//4. 写数据 fos.write(content.getBytes("utf-8"));fos.close();//5. 提示Toast.makeText(this, "保存完成", 0).show();} else {Toast.makeText(this, "sd卡没有挂载", 0).show();}}public void read(View v) throws Exception {// 1. 判断sd卡状态, 如果是挂载的状态才继续, 否则提示if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// 2. 读取输入的文件名String fileName = et_of_name.getText().toString();// 3. 得到指定文件的InputStream// 1).得到sd卡下的files路径String filesPath = getExternalFilesDir(null).getAbsolutePath();// 2).组成完整路径String filePath = filesPath + "/" + fileName;// 3). 创建FileInputStreamFileInputStream fis = new FileInputStream(filePath);// 4. 读取数据, 成StringByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while((len=fis.read(buffer))!=-1) {baos.write(buffer, 0, len);}String content = baos.toString();// 5. 显示et_of_content.setText(content);} else {Toast.makeText(this, "sd卡没有挂载", 0).show();}}// /storage/sdcard/atguigu/xxx.txtpublic void save2(View v) throws IOException {//1. 判断sd卡状态, 如果是挂载的状态才继续, 否则提示if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//2. 读取输入的文件名/内容String fileName = et_of_name.getText().toString();String content = et_of_content.getText().toString();//3. 得到指定文件的OutputStream//1). /storage/sdcard/String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();//2). /storage/sdcard/atguigu/(创建文件夹)File file = new File(sdPath+"/atguigu");if(!file.exists()) {file.mkdirs();//创建文件夹}//3). /storage/sdcard/atguigu/xxx.txtString filePath = sdPath+"/atguigu/"+fileName;//4). 创建输出流FileOutputStream fos = new FileOutputStream(filePath);//4. 写数据 fos.write(content.getBytes("utf-8"));fos.close();//5. 提示Toast.makeText(this, "保存完成", 0).show();} else {Toast.makeText(this, "sd卡没有挂载", 0).show();}}public void read2(View v) throws Exception {// 1. 判断sd卡状态, 如果是挂载的状态才继续, 否则提示if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// 2. 读取输入的文件名String fileName = et_of_name.getText().toString();// 3. 得到指定文件的InputStreamString sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();String filePath = sdPath+"/atguigu/"+fileName;FileInputStream fis = new FileInputStream(filePath);// 4. 读取数据, 成StringByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while((len=fis.read(buffer))!=-1) {baos.write(buffer, 0, len);}String content = baos.toString();fis.close();// 5. 显示et_of_content.setText(content);} else {Toast.makeText(this, "sd卡没有挂载", 0).show();}}}
5. sqlite数据库存储XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="testCreateDB" android:text="Create DB" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="testUpdateDB" android:text="Update DB" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="testInsert" android:text="Insert" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="testUpdate" android:text="Update" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="testDelete" android:text="Delete" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="testQuery" android:text="query" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="testTransaction" android:text="Test Transaction" /></LinearLayout>
5.2 sqlite数据库存储Activity
public class DBActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_db);}/* * 创建库 */public void testCreateDB(View v) {DBHelper dbHelper = new DBHelper(this, 1);//获取连接SQLiteDatabase database = dbHelper.getReadableDatabase();Toast.makeText(this, "创建数据库", 0).show();}/* * 更新库 */public void testUpdateDB(View v) {DBHelper dbHelper = new DBHelper(this, 2);//获取连接SQLiteDatabase database = dbHelper.getReadableDatabase();Toast.makeText(this, "更新数据库", 0).show();}/* * 添加记录 */public void testInsert(View v) {//1. 得到连接DBHelper dbHelper = new DBHelper(this, 2);SQLiteDatabase database = dbHelper.getReadableDatabase();//2. 执行insert insert into person(name, age) values('Tom', 12)ContentValues values = new ContentValues();values.put("name", "Tom");values.put("age", 12);long id = database.insert("person", null, values);//3. 关闭database.close();//4. 提示Toast.makeText(this, "id="+id, 1).show();}/* * 更新 */public void testUpdate(View v) {DBHelper dbHelper = new DBHelper(this, 2);SQLiteDatabase database = dbHelper.getReadableDatabase();//执行update update person set name=Jack, age=13 where _id=4ContentValues values = new ContentValues();values.put("name", "jack");values.put("age", 13);int updateCount = database.update("person", values , "_id=?", new String[]{"4"});database.close();Toast.makeText(this, "updateCount="+updateCount, 1).show();}/* * 删除 */public void testDelete(View v) {// 1. 得到连接DBHelper dbHelper = new DBHelper(this, 2);SQLiteDatabase database = dbHelper.getReadableDatabase();// 2. 执行delete delete from person where _id=2int deleteCount = database.delete("person", "_id=2", null);// 3. 关闭database.close();// 4. 提示Toast.makeText(this, "deleteCount=" + deleteCount, 1).show();}/* * 查询 */public void testQuery(View v) {// 1. 得到连接DBHelper dbHelper = new DBHelper(this, 2);SQLiteDatabase database = dbHelper.getReadableDatabase();// 2. 执行query select * from personCursor cursor = database.query("person", null, null, null, null, null, null);//cursor = database.query("person", null, "_id=?", new String[]{"3"}, null, null, null);//得到匹配的总记录数int count = cursor.getCount();//取出cursor中所有的数据while(cursor.moveToNext()) {//_idint id = cursor.getInt(0);//nameString name = cursor.getString(1);//ageint age = cursor.getInt(cursor.getColumnIndex("age"));Log.e("TAG", id+"-"+name+"-"+age);}// 3. 关闭cursor.close();database.close();// 4. 提示Toast.makeText(this, "count=" + count, 1).show();}/* * 测试事务处理 * update person set age=16 where _id=1 * update person set age=17 where _id=3 * * 一个功能中对数据库进行的多个操作: 要就是都成功要就都失败 * 事务处理的3步: * 1. 开启事务(获取连接后) * 2. 设置事务成功(在全部正常执行完后) * 3. 结束事务(finally中) */public void testTransaction(View v) {SQLiteDatabase database = null;try{DBHelper dbHelper = new DBHelper(this, 2);database = dbHelper.getReadableDatabase();//1. 开启事务(获取连接后)database.beginTransaction();//执行update update person set age=16 where _id=1ContentValues values = new ContentValues();values.put("age", 16);int updateCount = database.update("person", values , "_id=?", new String[]{"1"});Log.e("TAG", "updateCount="+updateCount);//出了异常boolean flag = true;if(flag) {throw new RuntimeException("出异常啦!!!");}//执行update update person set age=17 where _id=3values = new ContentValues();values.put("age", 17);int updateCount2 = database.update("person", values , "_id=?", new String[]{"3"});Log.e("TAG", "updateCount2="+updateCount2);//2. 设置事务成功(在全部正常执行完后)database.setTransactionSuccessful();} catch(Exception e) {e.printStackTrace();Toast.makeText(this, "出异常啦!!!", 1).show();} finally {//3. 结束事务(finally中)if(database!=null) {database.endTransaction();database.close();}}}}
5.3 数据库连接类
public class DBHelper extends SQLiteOpenHelper {public DBHelper(Context context,int version) {super(context, "atguigu.db", null, version);}/** * 什么时候才会创建数据库文件? * 1). 数据库文件不存在 * 2). 连接数据库 * * 什么时候调用? * 当数据库文件创建时调用(1次) * 在此方法中做什么? * 建表 * 插入一些初始化数据 */@Overridepublic void onCreate(SQLiteDatabase db) {Log.e("TAG", "DBHelper onCreate()");//建表String sql = "create table person(_id integer primary key autoincrement, name varchar,age int)";db.execSQL(sql);//插入一些初始化数据db.execSQL("insert into person (name, age) values ('Tom1', 11)");db.execSQL("insert into person (name, age) values ('Tom2', 12)");db.execSQL("insert into person (name, age) values ('Tom3', 13)");}//当传入的版本号大于数据库的版本号时调用@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {Log.e("TAG", "DBHelper onUpgrade()");}}
6. 远程服务器存储XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <EditText android:id="@+id/et_network_url" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textUri" android:text="@string/url" > </EditText> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="1. 测试HttpUrlConnection" android:textSize="20dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="testConnectionGet" android:text="GET请求" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="testConnectionPost" android:text="POST请求" /> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="2. 测试HttpClient" android:textSize="20dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="testClientGet" android:text="GET请求" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="testClientPost" android:text="POST请求" /> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="3. 测试Volley框架" android:textSize="20dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="testVolleyGet" android:text="GET请求" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="testVolleyPost" android:text="POST请求" /> </LinearLayout> <EditText android:id="@+id/et_network_result" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:hint="用来显示网络请求返回的结果数据" > </EditText></LinearLayout>
6.2 远程服务器存储Activity
public class NetworkActivity extends Activity {private EditText et_network_url;private EditText et_network_result;private RequestQueue queue;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_network);et_network_url = (EditText) findViewById(R.id.et_network_url);et_network_result = (EditText) findViewById(R.id.et_network_result);queue = Volley.newRequestQueue(this);}/* * 使用httpUrlConnection提交get请求 *//*1. 显示ProgressDialog2. 启动分线程3. 在分线程, 发送请求, 得到响应数据1). 得到path, 并带上参数name=Tom1&age=112). 创建URL对象3). 打开连接, 得到HttpURLConnection对象4). 设置请求方式,连接超时, 读取数据超时5). 连接服务器6). 发请求, 得到响应数据得到响应码, 必须是200才读取得到InputStream, 并读取成String7). 断开连接4. 在主线程, 显示得到的结果, 移除dialog */public void testConnectionGet(View v) {//1. 显示ProgressDialogfinal ProgressDialog dialog = ProgressDialog.show(this, null, "正在请求中...");//2. 启动分线程new Thread(){//3. 在分线程, 发送请求, 得到响应数据public void run() {try {//1). 得到path, 并带上参数name=Tom1&age=11String path = et_network_url.getText().toString()+"?name=Tom1&age=11";//2). 创建URL对象URL url = new URL(path);//3). 打开连接, 得到HttpURLConnection对象HttpURLConnection connection = (HttpURLConnection) url.openConnection();//4). 设置请求方式,连接超时, 读取数据超时connection.setRequestMethod("GET");connection.setConnectTimeout(5000);connection.setReadTimeout(6000);//5). 连接服务器connection.connect();//6). 发请求, 得到响应数据//得到响应码, 必须是200才读取int responseCode = connection.getResponseCode();if(responseCode==200) {//得到InputStream, 并读取成StringInputStream is = connection.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while((len=is.read(buffer))!=-1) {baos.write(buffer, 0, len);}final String result = baos.toString();baos.close();is.close();//4. 在主线程, 显示得到的结果, 移除dialogrunOnUiThread(new Runnable() {@Overridepublic void run() {et_network_result.setText(result);dialog.dismiss();}});}//7). 断开连接connection.disconnect();} catch (Exception e) {e.printStackTrace();//如果出了异常要移除dialogdialog.dismiss();}}}.start();}/* * 使用httpUrlConnection提交post请求 *//*1. 显示ProgressDialog2. 启动分线程3. 在分线程, 发送请求, 得到响应数据1). 得到path2). 创建URL对象3). 打开连接, 得到HttpURLConnection对象4). 设置请求方式,连接超时, 读取数据超时5). 连接服务器6). 发请求, 得到响应数据得到输出流, 写请求体:name=Tom1&age=11得到响应码, 必须是200才读取得到InputStream, 并读取成String7). 断开连接4. 在主线程, 显示得到的结果, 移除dialog */public void testConnectionPost(View v) {//1. 显示ProgressDialogfinal ProgressDialog dialog = ProgressDialog.show(this, null, "正在加载中...");//2. 启动分线程new Thread(new Runnable() {//3. 在分线程, 发送请求, 得到响应数据@Overridepublic void run() {try {//1). 得到pathString path = et_network_url.getText().toString();//2). 创建URL对象URL url = new URL(path);//3). 打开连接, 得到HttpURLConnection对象HttpURLConnection connection = (HttpURLConnection) url.openConnection();//4). 设置请求方式,连接超时, 读取数据超时connection.setRequestMethod("POST");connection.setConnectTimeout(5000);connection.setReadTimeout(5000);//5). 连接服务器connection.connect();//6). 发请求, 得到响应数据//得到输出流, 写请求体:name=Tom1&age=11OutputStream os = connection.getOutputStream();String data = "name=Tom2&age=12";os.write(data.getBytes("utf-8"));//得到响应码, 必须是200才读取int responseCode = connection.getResponseCode();if(responseCode==200) {//得到InputStream, 并读取成StringInputStream is = connection.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while((len=is.read(buffer))!=-1) {baos.write(buffer, 0, len);}final String result = baos.toString();baos.close();is.close();//4. 在主线程, 显示得到的结果, 移除dialogrunOnUiThread(new Runnable() {@Overridepublic void run() {et_network_result.setText(result);dialog.dismiss();}});}os.close();//7). 断开连接connection.disconnect();} catch (Exception e) {e.printStackTrace();dialog.dismiss();}}}).start();}/* * 使用httpClient提交get请求 */public void testClientGet(View v) {//1. 显示ProgressDialogfinal ProgressDialog dialog = ProgressDialog.show(this, null, "正在请求中...");//2. 启动分线程new Thread(){//3. 在分线程, 发送请求, 得到响应数据public void run() {try {//1). 得到path, 并带上参数name=Tom1&age=11String path = et_network_url.getText().toString()+"?name=Tom3&age=13";//2). 创建HttpClient对象HttpClient httpClient = new DefaultHttpClient();//3). 设置超时HttpParams params = httpClient.getParams();HttpConnectionParams.setConnectionTimeout(params, 5000);HttpConnectionParams.setSoTimeout(params, 5000);//4). 创建请求对象HttpGet request = new HttpGet(path);//5). 执行请求对象, 得到响应对象HttpResponse response = httpClient.execute(request);int statusCode = response.getStatusLine().getStatusCode();if(statusCode==200) {//6). 得到响应体文本HttpEntity entity = response.getEntity();final String result = EntityUtils.toString(entity);//4. 要主线程, 显示数据, 移除dialogrunOnUiThread(new Runnable() {@Overridepublic void run() {et_network_result.setText(result);dialog.dismiss();}});}//7). 断开连接httpClient.getConnectionManager().shutdown();} catch (Exception e) {e.printStackTrace();//如果出了异常要移除dialogdialog.dismiss();}}}.start();}/* * 使用httpClient提交post请求 */public void testClientPost(View v) {//1. 显示ProgressDialogfinal ProgressDialog dialog = ProgressDialog.show(this, null, "正在请求中...");//2. 启动分线程new Thread(){//3. 在分线程, 发送请求, 得到响应数据public void run() {try {//1). 得到pathString path = et_network_url.getText().toString();//2). 创建HttpClient对象HttpClient httpClient = new DefaultHttpClient();//3). 设置超时HttpParams params = httpClient.getParams();HttpConnectionParams.setConnectionTimeout(params, 5000);HttpConnectionParams.setSoTimeout(params, 5000);//4). 创建请求对象HttpPost request = new HttpPost(path);//设置请求体List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();parameters.add(new BasicNameValuePair("name", "Tom4"));parameters.add(new BasicNameValuePair("age", "14"));HttpEntity entity = new UrlEncodedFormEntity(parameters);request.setEntity(entity);//5). 执行请求对象, 得到响应对象HttpResponse response = httpClient.execute(request);int statusCode = response.getStatusLine().getStatusCode();if(statusCode==200) {//6). 得到响应体文本entity = response.getEntity();final String result = EntityUtils.toString(entity);//4. 要主线程, 显示数据, 移除dialogrunOnUiThread(new Runnable() {@Overridepublic void run() {et_network_result.setText(result);dialog.dismiss();}});}//7). 断开连接httpClient.getConnectionManager().shutdown();} catch (Exception e) {e.printStackTrace();//如果出了异常要移除dialogdialog.dismiss();}}}.start();}/* * 使用Volley提交get请求 *//* 1. 创建请求队列对象(一次) 2. 创建请求对象StringRequest 3. 将请求添加到队列中 */public void testVolleyGet(View v) {final ProgressDialog dialog = ProgressDialog.show(this, null, "正在请求中...");//创建请求对象StringRequestString path = et_network_url.getText().toString()+"?name=Tom5&age=15";StringRequest request = new StringRequest(path, new Response.Listener<String>() {@Overridepublic void onResponse(String response) {//在主线程执行et_network_result.setText(response);dialog.dismiss();}}, null);//将请求添加到队列中queue.add(request);}/* * 使用Volley提交post请求 */public void testVolleyPost(View v) {final ProgressDialog dialog = ProgressDialog.show(this, null, "正在请求中...");//创建请求对象StringRequestString path = et_network_url.getText().toString();StringRequest request = new StringRequest(Method.POST, path, new Response.Listener<String>() {@Overridepublic void onResponse(String response) {et_network_result.setText(response);dialog.dismiss();}}, null){//重写此方法返回参数的map作为请求体@Overrideprotected Map<String, String> getParams() throws AuthFailureError {Map<String, String> map = new HashMap<String, String>();map.put("name", "Tom6");map.put("age", "16");return map;}};//将请求添加到队列中queue.add(request);}}
7.AndroidManifest.xml
<!-- 操作sd卡 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 联网 --> <uses-permission android:name="android.permission.INTERNET"/>
0 0
- Android学习之数据存储
- Android学习之数据存储---SharedPreference
- 《老罗Android》学习之数据存储
- 学习android之 数据存储方式
- Android学习之SharePreferences轻量级数据存储
- Android学习文档之数据存储
- Android学习之SharedPreferences数据存储
- Android学习之数据存储整理
- Android学习14——数据存储之文件存储
- Android学习 数据存储之_文件存储
- android 学习 数据存储
- Android学习(24) -- 数据存储之解析xml数据
- Android之数据存储
- Android之数据存储
- Android之数据存储
- Android之数据存储
- Android开发学习之路- Android数据存储方式总结
- Android数据存储之文件存储数据
- okhttp使用方法
- Qt树形控件QTreeView使用
- Andrew Ng《Machine Learning》第七讲——支持向量机SVM(Support Vector Machine)
- [BZOJ2733][HNOI2012][启发式合并][平衡树]永无乡
- 关于出现UnixProcess$SeleniumWatchDog destroyHarder问题解决方案
- Android学习之数据存储
- 1004. Counting Leaves (30)
- 深入研究Servlet线程安全性问题
- 嵌入AppBar并且带搜索建议的搜索框(Android)
- JAVA源码笔记(jdk 1.7.0_75)--Thread-详细版本
- 希尔排序
- Android Studio使用新的Gradle构建工具配置NDK环境(二)
- java基础之foreach
- 初始化servlet中的两个init方法的区别