您的位置:首页 > 移动开发 > Objective-C

各种细的知识点(二)

2016-07-28 14:52 531 查看
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();
}


SharedPreferences类:

1)一种轻型的数据存储方式

2)本质上是基于xml文件存储key-value键值对数据

3)通常用来存储一些简单的配置信息。

SharedPreferences对象本身只能获取数据而不支持数据的修改和存储,存储要通过Editor编辑对象来实现

实现SharedPreferences存储的步骤是:

1)获取SharedPreferences对象;

2)获取SharedPreferences.Editor对象

3)通过Editor接口的putXXX方法保存key-value对,其中的XXX表示不同的数据类型

4)通过Editor接口中的commit()方法提交键值对。

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 修饰的成员变量和成员方法,只能在本类中使用。(就算创建类的对象也不能调用)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息