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