各种细的知识点(二)

        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 修饰的成员变量和成员方法,只能在本类中使用。(就算创建类的对象也不能调用)
各种细的知识点(二)_第1张图片

你可能感兴趣的:(各种细的知识点(二))