一.网络编程
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: 启动哪个就把哪个放在栈顶