• Android总结五(网络编程、Activity)


    一.网络编程

      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: 启动哪个就把哪个放在栈顶

  • 相关阅读:
    Odoo开发教程15-管理 Odoo 数据库
    星辉信息科技Odoo开发教程14-源码安装 Odoo第三讲
    星辉信息科技Odoo开发教程13-源码安装 Odoo第二讲
    Odoo开发教程12-源码安装 Odoo
    星辉信息科技Odoo开发教程11-使用 Windows 子系统安装 Linux
    Metasploit 进阶
    Metasploit 一些重要模块使用介绍
    Metasploit 使用基础
    【译】Attacking XML with XML External Entity Injection (XXE)
    CentOS6 安装Sendmail + Dovecot + Roundcubemail
  • 原文地址:https://www.cnblogs.com/FlySheep/p/3843387.html
Copyright © 2020-2023  润新知