一.网络编程
1.发送GET请求
AsyncHttpClient.get(), 使用RequestParams传递数据
2.发送POST请求
AsyncHttpClient.post(), 使用RequestParams传递数据
3.访问Webservice
Webservice就是别人写好的, 已经发布在网络上的公开的API, 应用程序中可以直接调用
4.上传
在RequestParams中添加一个File类型的字段, AsyncHttpClient就会执行上传操作
5.下载
请求下载路径, 使用FileAsyncHttpResponseHandler来处理下载文件
二.Activity
1.什么是Activity
安卓四大组件之一, 用来显示界面, 一个Activity就是应用中一个界面
2.创建
定义类继承Activity
清单文件中声明<activity>节点
3.启动
创建Intent对象, Intent指定要启动哪个Activity, startActivity()
a.显式意图:
指定类名, 通常用作应用程序内部跳转
通过构造函数, 或者setClass(), setClassName()方法可以指定类名
startActivity()启动一个Activity
如果启动其他应用程序中的Activity, 该Activity的export属性必须为true
b.隐式意图:
不指定类名, 通常用在应用程序之间跳转
通过Intent.setAction()和Intent.setData()来设置意图的动作和数据
Activity中的<intent-filter>如果能匹配上动作和数据就可以启动
4.关闭:调用Activity的finish()方法即可关闭activity
1)关闭主界面时弹出提示对话框:
(1)重写父类的finish()方法;
(2)设置弹出对话框。
2)关闭主界面时显示“再按一次退出XXXX”提示:
(1)重写父类的finish()方法;
(2)记录当前退出时间,计算按两次退出按钮的时间差。
3)代码:
关闭主界面时弹出提示对话框的代码:
@Override public void finish() {// 重写finish()方法,实现退出时弹出对话框提示 new AlertDialog.Builder(this).setTitle("确定要退出吗?").setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MainActivity.super.finish(); } }).setNegativeButton("取消", null).show(); }
关闭主界面时显示“再按一次退出XXXX”提示的代码:
@Override public void finish() {// 重写finish()方法,实现退出时弹出“再按一次退出XXXX”提示 if (System.currentTimeMillis() - previous < 1000) { super.finish(); } else { previous = System.currentTimeMillis(); Toast.makeText(getApplicationContext(), "再按一次退出XXXX", Toast.LENGTH_SHORT).show(); } }
5.传递数据
a.启动时传递数据
Intent可以使用putExtra()方法装入数据(键值对)
新Activity中getIntent()之后, 可以调用getStringExtra(), getIntExt(),...获取数据
可传递数据类型: 基本数据类型, String, Bundle, Serializable, Parcelable
传递代码:
Intent intent = new Intent(this, OtherActivity.class); /* // 传递基本数据 intent.putExtra("name", "张三"); intent.putExtra("age", 18); */ /* //传递自定义类数据,自定义类必须实现Serializable接口 Person p=new Person("李四",12); intent.putExtra("p", p); */ /* //传递Bundle(Map集合)数据 Bundle bundle=new Bundle(); bundle.putString("name", "张三"); bundle.putInt("age", 12); intent.putExtra("bundle", bundle); */ //传递Parcelable,自定义类必须实现Parcelable接口 Person p=new Person("玩玩", 11); intent.putExtra("p", p); startActivity(intent);
接收数据代码:
Intent intent = getIntent(); /* // 接收基本数据 String name = intent.getStringExtra("name"); int age = intent.getIntExtra("age", -1); */ /* //接收自定义类数据 Person p= (Person) intent.getSerializableExtra("p"); */ /* //接收Bundle数据 Bundle bundle= intent.getBundleExtra("bundle"); */ //接收Parcelable数据 Person p= intent.getParcelableExtra("p"); tv.setText(p.getName() + "," + p.getAge());
实现Parcelable接口的Person类:
package com.gnnuit.activity; import android.os.Parcel; import android.os.Parcelable; public class Person implements Parcelable { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(String name, int age) { super(); this.name = name; this.age = age; } public Person() { } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int flags) {// 定义怎样把数据写到Parcel中 parcel.writeString(name); parcel.writeInt(age); } public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { public Person createFromParcel(Parcel parcel) {// 定义怎样从Parcel中取出数据 return new Person(parcel.readString(), parcel.readInt()); } public Person[] newArray(int size) { return new Person[size]; } }; }
b.关闭时返回数据
如果希望新的Activity可以返回数据, 那么就需要使用startActivityForResult()方法来启动Activity
在新的Activity中调用setReuslt()方法设置要返回的数据
finish()之后, 原Activity会自动调用onActivityResult(), 该方法的形参就是setReuslt()设置的数据
6.生命周期
7.横竖屏切换
a.默认情况下, 横竖屏切换时会摧毁Activity重构, 因为要进行屏幕适配.
可以使用onSaveInstanceState()保存数据, 用onRestoreInstanceState()恢复数据
onSaveInstanceState()在Activity失去焦点时也会被调用, 如果Activity在后台被杀死了, 再次启动时会自动调用onRestoreInstanceState()
b.如果不需要屏幕适配, 那么可以通过定义属性控制Activity不摧毁重构
android:configChanges="orientation|screenSize"
这种情况下不执行任何生命周期方法, 也不会改变布局
c.固定Activity方向
android:screenOrientation="portrait"
在这种情况下, Activity不会摧毁重构, 也不会改变方向
d.相关代码
getResources().getConfiguration().orientation
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
8.启动模式
a.standard: 每次都启动一个新的
b.singleTop: 不能自己创建自己
c.singleTask: 启动哪个, 就把它上面的出栈
d.singleInstance: 启动哪个就把哪个放在栈顶