1、android studio

1-1、创建项目

1.png

  1. //同一网络下真机调试,需安装以下插件

2.png

1-2、启动项目

q.png

  1. //连接夜神模拟器
  2. adb connect 127.0.0.1:62001
  1. //将minSDKVersion 28改为22,然后点击右上角的Sync Now,最后点击绿色的箭头启动项目

q.png

2、项目结构

  1. app-res-layout activity_main.xml //视图层
  2. app-java MainActivity.java //逻辑控制层 activity活动 vue-组件
  3. AndroidManifest.xml //将活动注册在这个文件中
  1. <activity android:name=".MainActivity">
  2. <intent-filter>
  3. <action android:name="android.intent.action.MAIN" />
  4. <category android:name="android.intent.category.LAUNCHER" />
  5. </intent-filter>
  6. </activity>
  7. //category包含了一个活动的附加的一些信息,是可以自定义。它精确了指明了当前活动能够响应的Intent

3、布局

  1. //layout/.xml
  2. <LinearLayout
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <Button
  7. android:text="按钮"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content" />
  10. </LinearLayout>
  1. android:layout_width //定义width
  2. android:layout_height //定义height
  3. match_parent 继承父组件的width,height
  4. wrap_content 组件实际的大小

4、简单的点击事件

  1. //1.main_activity
  2. <Button
  3. android:id="@+id/main_btn"
  4. android:text="按钮"
  5. android:layout_width="match_parent"
  6. android:layout_height="wrap_content" />
  1. //2.MainActivity
  2. Button btn = (Button) findViewById(R.id.main_btn);
  3. btn.setOnClickListener(new View.OnClickListener() {
  4. @Override
  5. public void onClick(View v) {
  6. Toast.makeText(MainActivity.this,"android牛逼",Toast.LENGTH_SHORT).show();
  7. }
  8. });

5、Intent

  1. Intent:是Android程序进行用户交互的一种方式。它不仅可以指明当前组件想要执行的动作,还可以在不同的组件之间传递数据。
  1. 1.启动活动
  2. 2.启动服务
  3. 3.发送广播

5-1、打电话

  1. public void onClick(View v) {
  2. Intent intent = new Intent(Intent.ACTION_DIAL);
  3. intent.setData(Uri.parse("tel:10086"));
  4. startActivity(intent);
  5. }

5-2、开启一个网页

  1. Intent intent = new Intent(Intent.ACTION_VIEW);
  2. intent.setData(Uri.parse("https://www.baidu.com"));
  3. startActivity(intent);

6、修改app的图标和名称

  1. //res/drawable //ctrl+鼠标左键
  2. android:icon="@drawable/logo"
  3. android:label="@string/app_name"

7、控件

  1. //ImageView 只能加载本地图片
  2. <ImageView
  3. android:src="@drawable/logo"
  4. android:layout_width="200dp"
  5. android:layout_height="200dp" />

8、Freso加载网络图片

引入和使用Freso

  1. //引入依赖
  2. implementation 'com.facebook.fresco:fresco:2.0.0'
  1. //2.配置 AndroidManifest.xml
  2. //用户权限
  3. <uses-permission android:name="android.permission.INTERNET"/> //允许进行网络请求
  1. //3.MainActivity.java
  2. Fresco.initialize(this); //配置到setContentView前面
  3. setContentView(R.layout.activity_main);
  1. //4.xml布局文件中, 加入命名空间:
  2. <!-- 其他元素-->
  3. <LinearLayout
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. xmlns:fresco="http://schemas.android.com/apk/res-auto"
  6. android:layout_height="match_parent"
  7. android:layout_width="match_parent">
  1. //5.SimpleDraweeView: layout
  2. <com.facebook.drawee.view.SimpleDraweeView
  3. android:id="@+id/my_image_view"
  4. android:layout_width="130dp"
  5. android:layout_height="130dp"
  6. fresco:placeholderImage="@drawable/logo"
  7. />
  1. //6.开始加载图片:MainActivity
  2. Uri uri = Uri.parse("xxx");
  3. SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
  4. draweeView.setImageURI(uri);
  1. alt+enter自动导包

9、Picasso加载网络图片

引入依赖

  1. //1.引入依赖 //build.gradle(module:app)
  2. implementation 'com.squareup.picasso:picasso:2.71828'

加载图片

  1. //layout
  2. <ImageView
  3. android:id="@+id/ImageView"
  4. android:layout_width="50dp"
  5. android:layout_height="50dp" />
  1. //2.使用 MainActivity
  2. ImageView imageView = (ImageView) findViewById(R.id.ImageView);
  3. Picasso.get().load("xxx").into(imageView);

10、添加Menu

  1. //1.res下新建一个menu文件夹
  2. //2.menu下新建New-Menu resource file,文件名就叫main
  3. /menu/main.xml
  4. <item
  5. android:icon="@drawable/sao"
  6. android:id="@+id/sao"
  7. android:title="扫一扫" />
  8. <item
  9. android:icon="@drawable/add"
  10. android:id="@+id/add"
  11. android:title="添加好友"/>
  1. //3.MainActivity配置
  2. @Override
  3. public boolean onCreateOptionsMenu(Menu menu) {
  4. getMenuInflater().inflate(R.menu.main,menu);
  5. return super.onCreateOptionsMenu(menu);
  6. }
  1. //4.给Menu下的item设置事件
  2. @Override
  3. public boolean onOptionsItemSelected(@NonNull MenuItem item) {
  4. switch (item.getItemId()){
  5. case R.id.sao:
  6. Toast.makeText(MainActivity.this,"扫一扫",Toast.LENGTH_SHORT).show();
  7. break;
  8. case R.id.add:
  9. Toast.makeText(MainActivity.this,"添加朋友",Toast.LENGTH_SHORT).show();
  10. default:
  11. }
  12. return true;
  13. }

11、finish()

  1. 使用finish()可以销毁一个活动
  1. //java/MainActivity
  2. @Override
  3. public void onClick(View v) {
  4. finish();
  5. }

12、打印日志

  1. Log.d("main","hello world");
  1. //layout
  2. <Button
  3. android:id="@+id/main_btn"
  4. android:text="打印日志"
  5. android:layout_width="match_parent"
  6. android:layout_height="wrap_content" />
  1. //java/MainActivity
  2. Button btn = (Button) findViewById(R.id.main_btn);
  3. btn.setOnClickListener(new View.OnClickListener(){
  4. @Override
  5. public void onClick(View v) {
  6. Log.d("main","hello world");
  7. }
  8. });
  1. //LogCat控制台看打印数据

13、页面跳转

13-1、新建活动

activity.png

13-2、跳转(不传参)

  1. //layout
  2. <Button
  3. android:id="@+id/main_btn"
  4. android:text="跳转到详情"
  5. android:layout_width="match_parent"
  6. android:layout_height="wrap_content" />
  1. //java/MainActivity
  2. Button btn = (Button) findViewById(R.id.main_btn);
  3. btn.setOnClickListener(new View.OnClickListener(){
  4. @Override
  5. public void onClick(View v) {
  6. Intent intent = new Intent(MainActivity.this,DetailActivity.class);
  7. startActivity(intent);
  8. }
  9. });

13-3、跳转传值

  1. //java/MainActivity
  2. Button btn = (Button) findViewById(R.id.main_btn);
  3. btn.setOnClickListener(new View.OnClickListener(){
  4. @Override
  5. public void onClick(View v) {
  6. String id="1001";
  7. Intent intent = new Intent(MainActivity.this,DetailActivity.class);
  8. intent.putExtra("id",id);
  9. startActivity(intent);
  10. }
  11. });
  1. //跳转页面接收值 getIntent和getStringExtra
  1. //java/DetailActivity
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_detail);
  6. //+++
  7. Intent intent = getIntent();
  8. String data = intent.getStringExtra("id");
  9. Log.d("id",data);
  10. }

14、进程和线程

  1. 进程:在计算机上运行的一个应用程序就是一个进程。
  1. 线程:线程时进程的基本单位。一个进程由一个或者多个线程组成。线程和线程之间是独立的。
  1. 进程和线程在使用内存的区别:
  2. 1.操作系统会给进程分配独立的内存空间
  3. 2.多个线程共享内存空间

15、给多个按钮执行点击事件

  1. //layout
  2. <LinearLayout
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <Button
  7. android:text="发送http"
  8. android:id="@+id/send_http"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content" />
  11. <Button
  12. android:text="btn2"
  13. android:id="@+id/btn2"
  14. android:layout_width="match_parent"
  15. android:layout_height="wrap_content" />
  16. </LinearLayout>
  1. //MainActivity
  2. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. Button btn = (Button) findViewById(R.id.send_http);
  8. Button btn2 = (Button) findViewById(R.id.btn2);
  9. btn.setOnClickListener(this);
  10. btn2.setOnClickListener(this);
  11. }
  12. @Override
  13. public void onClick(View v) {
  14. switch (v.getId()){
  15. case R.id.send_http:
  16. Log.d("main","send_http");
  17. break;
  18. case R.id.btn2:
  19. Log.d("main","btn2");
  20. break;
  21. }
  22. }
  23. }

16、okHttp(发送http请求)

  1. implementation("com.squareup.okhttp3:okhttp:4.3.0")
  1. Button btn = (Button) findViewById(R.id.send_http);
  2. btn.setOnClickListener(this);
  3. @Override
  4. public void onClick(View v) {
  5. sendHttp();
  6. }
  7. private void sendHttp(){
  8. new Thread(new Runnable() {
  9. @Override
  10. public void run() {
  11. Log.d("main","new Thread");
  12. }
  13. }).start();
  14. }
  1. @Override
  2. public void onClick(View v) {
  3. responseTxt.setText("hello world");
  4. sendHttp();
  5. }
  6. private void sendHttp(){
  7. new Thread(new Runnable() {
  8. @Override
  9. public void run() {
  10. try{
  11. OkHttpClient client = new OkHttpClient();
  12. Request request = new Request.Builder().url("https://music.aityp.com/").build();
  13. Response response = client.newCall(request).execute();
  14. String responseData = response.body().string();
  15. Log.d("http",responseData);
  16. }catch (IOException e){
  17. e.printStackTrace();
  18. }
  19. }
  20. }).start();
  21. }

17、改变TextView的值

  1. //点击按钮改变TextView的值
  2. <TextView
  3. android:id="@+id/response_txt"
  4. android:text="hello"
  5. android:layout_width="match_parent"
  6. android:layout_height="wrap_content" />
  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  2. +++TextView responseTxt;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. Button btn = (Button) findViewById(R.id.send_http);
  8. +++responseTxt = (TextView)findViewById(R.id.response_txt);
  9. btn.setOnClickListener(this);
  10. }
  11. @Override
  12. public void onClick(View v) {
  13. +++responseTxt.setText("hello world");
  14. }
  15. }

改变TextView中的json数据

  1. 不允许在子线程中操作UI
  1. TextView responsetTxt;
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. Button btn = (Button) findViewById(R.id.send_http);
  7. +++responsetTxt = (TextView)findViewById(R.id.response_txt);
  8. btn.setOnClickListener(this);
  9. }
  1. private void sendHttp(){
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. try{
  6. OkHttpClient client = new OkHttpClient();
  7. Request request = new Request.Builder().url("https://music.aityp.com/").build();
  8. Response response = client.newCall(request).execute();
  9. String responseData = response.body().string();
  10. +++showResponse(responseData);
  11. Log.d("http",responseData);
  12. }catch (IOException e){
  13. e.printStackTrace();
  14. }
  15. }
  16. }).start();
  17. }
  1. private void showResponse(final String res){
  2. // android不允许在子线程中操作UI,可以通过runOnUiThread方法,
  3. runOnUiThread(new Runnable() {
  4. @Override
  5. public void run() {
  6. JSONObject obj = JSON.parseObject(res);
  7. responsetTxt.setText(res);
  8. }
  9. });
  10. }

18、fastjson(解析json)

  1. 1、开启子线程发送http
  2. 2、在ui线程中获取数据
  3. 3、使用fastjson对数据进行解析
  4. 4、创建实体类和接收数据映射
  5. 5、获取数据
  1. //1、引入依赖
  2. implementation 'com.alibaba:fastjson:1.1.71.android'
  1. //java/AppData
  2. package com.example.android_day02;
  3. //javabena 实体类,里面全部是属性,有get,set
  4. public class AppData {
  5. private String msg;
  6. private int code;
  7. public String getMsg() {
  8. return msg;
  9. }
  10. public void setMsg(String msg) {
  11. this.msg = msg;
  12. }
  13. private void setCode(int code){
  14. this.code = code;
  15. }
  16. }
  1. //MainActivity
  2. private void showResponse(final String res){
  3. // android不允许在子线程中操作UI,可以通过runOnUiThread方法,
  4. runOnUiThread(new Runnable() {
  5. @Override
  6. public void run() {
  7. JSONObject obj = JSON.parseObject(res);
  8. AppData data = JSON.toJavaObject(obj,AppData.class);
  9. responsetTxt.setText(data.getMsg());
  10. }
  11. });
  12. }

19、生命周期

  1. - onCreate 活动第一创建的时候会调用
  2. - onStart 活动由不可见到可见的时候会触发
  3. - onResume 活动处于栈的顶部会触发
  4. - onPause 活动处于暂停状态的时候会触发
  5. - onStop() 活动不可见的时候会触发
  6. - onDestroy() 活动会触发
  7. - onRestart() 窗口重新被启动的时候会触发
  1. //页面初次加载以下生命周期函数触发:
  2. onCreate()
  3. onStart()
  4. onResume()
  1. //A页面跳转以下生命周期函数触发:
  2. onPause()
  3. onStop()
  4. //跳回到A以下生命周期函数触发:
  5. onRestart()
  6. onStart()
  7. onResume()
  8. //退出程序以下生命周期函数触发:
  9. onPause()
  10. onStop()
  11. onDestroy()
  1. //生命周期函数的映射
  2. onCreate() onDestroy() 完整生存期
  3. onStart() Stop() 可见生存期
  4. onResume() onPause() 前台生存期