例如我们编写了一个HttpUtil类,然后封装了起来
public class HttpUtil{
public static void sendHttpRequest(final String address,final HttpCallbackListener listener){
new Thread(new Runnable()){
@override
public void run() {
HttpURLConnection connection = null;
try{
URL url = new URL(address);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
connection.setDoInput(true);
connection.setDoOutput(true);
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in);
StringBuilder response =new StringBuilder();
String line=null;
while ((line = reader.readLine())!=null){
response.append(line);
}
if (listener!=null){
listener.onFinish(response.toString());
}
}catch (Exception e) {
if (listener!=null){
listener.onError(e);
}
}finally {
if(connection!=null){
connection.disconnection();
}
}
}
}).start();
}
}
当我们想在里面打印Toast时,却发现找不到context,这是我们可以定制自己的Application类,以便管理一些全局的状态信息,比如说全局Context.
public class MyApplication extends Application{
private static Context context;
@override
public void onCreate(){
context=getApplicationContext();
}
public static Context getContext(){
return context;
}
}
然后在配置文件下添加android:name 的参数
<application
android:name="com.example.networktest.MyApplication">
Intent intentNext = new Intent(getApplicationContext(), MusicService.class);
intentNext.putExtra("musicpath", songPath);
intentNext.putExtra(PLAY_TYPE_FLAG, TYPE_PLAYER);
startActivity(intent);
表示将一个对象转化成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。至于序列化的方法也是很简单,只需要一个类去实现Serializable这个接口就可以了。
public class Person implentents Serializable{
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;
}
}
这里让Person类去实现了Serializable接口,这样所有的Person对象就都是可以序列化的了。
Person person=new Person();
person.setName("tom");
person.setAge(10);
Intent intent =new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("person_data",person);
startActivity(intent);
在SecondActivity中获得对象的方法为
Person person=(Person)getIntent().getSerializableExtra("person_data");
Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型。
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;
}
@override
public void writeToParcel(Parcel dest,int flags){
dest.writeString(name);//写出name
dest.writeInt(age);//写出age
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){
@override
public Person createFromParcel(Parcel source){
Person person=new Person();
person.name=source.readString();//读取name
person.age = source.readInt();//读取age
return person;
}
@override
public Person[] newArray(int size){
return new Person[size];
}
};
}
接下来我们在FirstActivity中用同样的形式来传递数据
但是
在SecondActivity中获取对象有所不同,如下:
Person person =(Person) getIntent().getParcelableExtra("person_data");