if (str == null || str.isEmpty()) {
//其中的内容为空 isEmpty()
}
if (str == null || str.length() <= 0) {
//长度方法
}
if (str == null || "".equals(str)) {
//"".equals(str) ""一定要写在前面
}
判断集合非空的方法:
if (list == null || list.size() == 0) {
//(list!=null)
}
//用于判断两个字符串是否相等 此时表示字符串null
TextUtils.equals("null", str);
json:
JSONObject has() JSONException getJSONArray("") getJSONObject(i) getString(age)(获取不同类型的属性值)
JSONObject object = new JSONObject();
if (object.has("OrderQuantity")) {
//返回值为boolean类型 这个json对象是否有此属性 has()方法
try {
String pid = object.getString("ProductID");
//获取属性的值
} catch (JSONException e) {
e.printStackTrace();
}
}
private void initJson() {
String json = "";
try {
JSONObject jsonObject = new JSONObject(json);
// json里面只有json对象和json数组
JSONArray list = jsonObject.getJSONArray("list");
for (int i = 0; i < list.length(); i++) {
//json里面存储的是json对象 获取每一个json对象
JSONObject jsonObj = list.getJSONObject(i);
String id = jsonObj.getString("id");
String packageName = jsonObj.getString("packageName");
String age = jsonObj.getString("age");
int ages = Integer.parseInt(age);
//json对象属性值的类型是不确定的,不一定都是String
int score = jsonObj.getInt("score");
long time = jsonObj.getLong("time");
AppInfo appInfo = new AppInfo(id, packageName, ages, score, time);
}
} catch (JSONException e) {
//解析json会抛出异常,一定要注意
Log.e(TAG, e.getMessage());
}
}
for循环:
//一定要记住这种写法
for (String str : list) {
str.length();
}
fragment与activiity之间传递数据(记住这种写法以及两个方法/ Bundle类/ getActivity() ) 编写一个接口实现
activity与fragment之间的数据传递,关键是哪两个方法?
1.Fragment中通过getActivity()然后进行强制转化,调用Activity中的公有方法
((XXXXActivity)getActivity()).fun();(调用父类中的方法)
2.Activity在切换Fragment的时候,通过setArguments向Fragment传递参数,Fragment通过getArguments();获得从activity中传递过来的值。
setArguments(Bundle bundle)
3.Activity实现一个接口,Fragment在onAttach方法中,将该Activity转化为该接口,在需要调用的时候回调。
多个Fragment之间,可以通过Activity复用很多代码,提高效率。
使用Bundle传递数据:
两个页面之间使用Bundle传递数据。intent.putExtras(bundle).
Bundle可以传递序列化数据
getIntent() 获取的intent要判断是否为空? FragmentManager carGoodsFragment.setArguments(bundle); Bundle bundle = getArguments(); FragmentTransaction
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//在这里需要获取一个fragment实例,那我通过返回值给你,
carGoodsFragment = CarGoodsFragment.getInstance("陈如水", 22);
//使用fragment替换布局 (FragmentManager)
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.layout, carGoodsFragment);
ft.commit();
}
});
//目的是获取一个CarGoodsFragment,并且能够向此Fragment传递参数
public static CarGoodsFragment getInstance(String name, int age) {
CarGoodsFragment carGoodsFragment = new CarGoodsFragment();
Bundle bundle = new Bundle();
bundle.putString("name", name);
bundle.putInt("age", age);
carGoodsFragment.setArguments(bundle);
//关键是两个方法和bundle的使用、以及一种思想
return carGoodsFragment;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//获取传递过来的数据
Bundle bundle = getArguments();
String name = bundle.getString("name");
int age = bundle.getInt("age");
//通过这种方式获取activity的实例
FragmentManager fm = ((MainActivity) getActivity()).getSupportFragmentManager();
}
//此方法用于向activity传递数据
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
callBack = ((CallBack) getActivity());
myListener = ((MyListener) getActivity());
}
Bitmap类的使用
private void initBittmap() {
//Bitmap类的使用
Bitmap bitmap = Bitmap.createBitmap(400, 800, Bitmap.Config.ARGB_8888);
//Bitmap对象在不使用时,调用recycle()方法释放内存!否则容易造成内存泄露。
bitmap.recycle();
}
private void initFiles() {
//getFilesDir()方法用于获取/data/data//files目录(当前应用程序默认的数据存储目录,目录指3文件夹)
File filesDir = this.getFilesDir();
//getCacheDir()方法用于获取/data/data//cache目录
File cacheDir = this.getCacheDir();
}
private void initSharedPreferences() {
//首选项的使用
SharedPreferences sp = this.getSharedPreferences("config", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("name", "陈如水");
editor.putInt("age", 22);
editor.putLong("time", System.currentTimeMillis());//系统身上还有关闭虚拟机的方法
editor.putBoolean("isCollect", true);
editor.commit();
}
构造方法的作用:给对象的数据进行初始化
格式:方法名与类名相同、没有返回值连void都没有
注意事项:如果你不提供构造方法,系统会给一个默认的构造方法;如果手动写了构造方法,系统将不再提供。
构造方法是可以重载的
任何类都有构造方法。
当你new A()时,默认你有一个有无参构造方法A()的方法里的第一句,会自动加上一个super();的方法,
这句就是调用父类构造方法的意思,这是java规定的规则。
类必须调用父类的构造函数,在子类构造函数前应先写上super.(),若你没写这句,系统默认自动给你调用父类中无参数的构造函数(但是如果你父类没有无参的构造函数,而你又没super.()的话 编译就会报错!)。
调用父类中的方法与调用父类的构造方法不一样.
super代指父类的对象 super.onCreate(savedInstanceState); @Override 的作用是重写父类的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_car_goods_details);
}
super有两个用法:
1、放在子类构造方法首行,是调用父类的构造方法。
2、在子类的方法中可以通过super.来调用父类的同名成员变量或者方法。
AndroidStudio的时候提非法字符: '\ufeff' 解决方案?
应该是隐蔽字符BOM的问题.用Notepad++打开,果然原创作者没用采用(UTF-8 无DOM)模式。
我们只需要点击把它转为UTF-8无BOM格式编码即可。
AS显示快速文档
以后一定要注意, 封装对象时 不能多层嵌套(一定不能) 都抽取出来(不能使用嵌套内部类的形式)
内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事(只做好这一件事情,和其他的没联系)。它描述的是模块内的功能联系;所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
(耦合可以理解成依赖)
回调方法中是否会处理业务逻辑,会导致接口回调的写法不一样。
构造方法的作用
布局文件里面,凡是以layout开头的属性都是经过父容器批准才能生效的.
activity的生命周期:
1)显示状态 onCreate() onStart() onResume()
2)看不见状态 onPause() onStop()
3)销毁状态 onDestory()
java中4种修饰符访问权限的区别,再一次说明java语言的严谨性和安全性.
private 修饰的成员变量和成员方法,只能在本类中使用。(就算创建类的对象也不能调用)