前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >后端工程师入门安卓开发笔记(一)

后端工程师入门安卓开发笔记(一)

作者头像
汤青松
发布2022-06-29 15:14:16
4370
发布2022-06-29 15:14:16
举报
文章被收录于专栏:PHP技术大全PHP技术大全

背景摘要

我是daxia,一个做了8年多的后端开发,对前端一直仅限于Web页面开发,对移动端开发和小程序开发基本零基础;有时候想做一些有意思的东西出来,用网页实现对手机支持现在是不理想,忙里偷闲学了学安卓,把一些我觉得是重点内容做一个笔记,也希望笔记对其他人有所帮助。

一、开发步骤

先写好界面->再写Activity的逻辑,界面别管样式,只关心你需要的交互元素就行。

布局示例代码,一般用LinearLayout布局,LinearLayout布局有竖向布局和横向布局,main.xml文件里一定要有android:orientation="vertical"这行代码

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    >

    <EditText
        android:id="@+id/login_input_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你的用户名" />

</LinearLayout>

二、点击事件

  1. 引入监听事件的包
  2. 需要xml里面的button按钮设置一个ID
  3. 在控制器 找到ID,设置一个监听事件
  4. 然后实现 onClick方法
代码语言:javascript
复制
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button login_btn_submit;
    
        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //找到对应元素
        login_btn_submit = findViewById(R.id.login_btn_submit);
        //设置监听事件
        login_btn_submit.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View view) {
        int id = view.getId();
        if (id == R.id.login_btn_submit) {
            userLogin();
        }
    }

三、Activity 之间跳转和数据传递

3.1 跳转页面

先获取值内容,然后使用Intent进行跳转,具体看示例代码

代码语言:javascript
复制
    //执行用户登录
    protected void userLogin() {

        Intent intent = new Intent();
        intent.putExtra("username", login_input_username.getText());
        intent.putExtra("password", login_input_password.getText());
        intent.setClass(MainActivity.this, UserList.class);
        startActivity(intent);
    }

3.2 接收数据

B页面接收数据

代码语言:javascript
复制
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_list);
        try {
            Intent intent = getIntent();
            userId = intent.getExtras().getString("user_id");
            Log.i(getLocalClassName(), "22222____" + userId);
        } catch (NullPointerException e) {
            Toast.makeText(this, "user_id is null", Toast.LENGTH_LONG).show();
        }

        initView();
    }

四、列表页面布局

4.1 新建子页面

新建一个xml,用于每一行的布局

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/user_item_name"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:text="11" />

    <TextView
        android:id="@+id/user_item_age"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:text="11" />

    <ImageView
        android:id="@+id/user_item_pic"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:src="@mipmap/touxiang" />

</LinearLayout>

4.2 准备数据

新建一个数据结构对象,确定数据格式

定义了三个变量,可以用编辑器的生成功能自动生成对应访问方法

代码语言:javascript
复制
package site.qingscan.qingting;

import java.io.Serializable;

public class Account implements Serializable {

    private String name;
    private int age;
    private int pic;
}

4.3 数据适配

新建一个适配器

将页面和数据进行渲染

代码语言:javascript
复制
package site.qingscan.qingting;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;

public class UserListAdapter extends BaseAdapter {
    private List<Account> userList;
    private Context context;

    public UserListAdapter(List<Account> userList,Context context) {
        this.userList = userList;
        this.context = context;
    }

    @Override
    public int getCount() {
        return userList.size();
    }

    @Override
    public Object getItem(int i) {
        return userList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        //找到页面
        LinearLayout layout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.user_list_item, null);
        //找到对应元素
        TextView user_item_name = (TextView) layout.findViewById(R.id.user_item_name);
        TextView user_item_age = (TextView) layout.findViewById(R.id.user_item_age);
        ImageView user_item_pic = layout.findViewById(R.id.user_item_pic);
        //给元素赋值
        user_item_name.setText(userList.get(i).getName());
        user_item_age.setText(Integer.toString(userList.get(i).getAge()));
        user_item_pic.setImageResource(userList.get(i).getPic());
        //返回对象
        return layout;
    }
}

4.4 组合调用

在activity中调用

代码语言:javascript
复制
    private void initView() {
        user_list = findViewById(R.id.userlist_list);
        ArrayList<Account> users = new ArrayList<>();

        for (int i = 0; i < 5; i++) {
            Account tempObj = new Account();
            tempObj.setName("tqs" + Integer.toString(i));
            tempObj.setAge(25 + i);
            tempObj.setPic(R.mipmap.touxiang);
            users.add(tempObj);
        }

        user_list.setAdapter(new UserListAdapter(users,this));

    }

五、网络请求

5.1 POST请求

先定义一个HTTP发包的函数,代码如下所示

代码语言:javascript
复制
   public String httpLoginRequest(String username, String psd) {
        String msg = "";    //服务器返回结果
        try {
            URL url = new URL(loginUrlZhuCe);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setConnectTimeout(5000);
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setRequestProperty("Charset", "UTF-8");
            httpURLConnection.connect();
            //post请求传递参数
            String data = "uname=" + username + "&psd=" + psd;   //参数之间用&连接
            //向服务器发送数据(输出流)
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(httpURLConnection.getOutputStream(), "UTF-8"));
            writer.write(data);
            writer.close();

            //接受服务器反馈信息
            int code = httpURLConnection.getResponseCode();  //获得服务器反馈信息
            Log.d("login", "" + code);
            if (code == HttpURLConnection.HTTP_OK) {
                //接收服务器返回信息(输入流)
                BufferedReader reader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), "UTF-8"));
                String line = "";
                //使用循环来获得数据,一次一行
                while ((line = reader.readLine()) != null) {
                    msg += line;
                }
                Log.d("login", "msg:" + msg);
                reader.close();  //关闭
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return msg;
    } //end login

5.2 子线程调用

网络请求不能放到主线程里执行,需要新建一个线程

代码语言:javascript
复制
    protected void userLogin() {

        new Thread(new Runnable() {
            public void run() {
                httpLoginRequest("dddd", "bbb");
            }
        }).start();
        
    }

需要注意,访问网络需要加权限

AndroidManifest.xml文件的<manifest>标签里加

代码语言:javascript
复制
    <uses-permission android:name="android.permission.INTERNET" />

作者:汤青松

日期: 2022年06月28日

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景摘要
  • 一、开发步骤
  • 二、点击事件
  • 三、Activity 之间跳转和数据传递
    • 3.1 跳转页面
      • 3.2 接收数据
      • 四、列表页面布局
        • 4.1 新建子页面
          • 4.2 准备数据
            • 4.3 数据适配
              • 4.4 组合调用
              • 五、网络请求
                • 5.1 POST请求
                  • 5.2 子线程调用
                  相关产品与服务
                  云开发 CloudBase
                  云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档