Android-Entwicklungshinweise für Back-End-Ingenieure zum Einstieg (1)

Hintergrundzusammenfassung

Ich bin Daxia, eine Back-End-Entwicklerin, die seit mehr als 8 Jahren arbeitet. Das Front-End war auf die Entwicklung von Webseiten beschränkt, und ich habe im Grunde keine Grundlagen in der Entwicklung mobiler Endgeräte und der Entwicklung kleiner Programme. Unterstützung für Mobiltelefone ist vorhanden Jetzt ist es nicht ideal. Ich habe eine Pause gemacht, um Android zu lernen, und mir einige meiner Meinung nach wichtige Inhalte notiert. Ich hoffe auch, dass die Notizen für andere hilfreich sein können.

1. Entwicklungsschritte

Schreiben Sie zuerst die Schnittstelle -> dann schreiben Sie die Logik der Aktivität. Unabhängig vom Stil der Schnittstelle müssen Sie sich nur um die interaktiven Elemente kümmern, die Sie benötigen.

Beispielcode für das Layout. Verwenden Sie im Allgemeinen das LinearLayout-Layout. Das LinearLayout-Layout verfügt über ein vertikales und ein horizontales Layout. android:orientation="vertical"Diese Codezeile muss in der Datei main.xml vorhanden sein

<?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>

2. Klicken Sie auf Ereignis

  1. Stellen Sie ein Paket vor, das auf Ereignisse hört
  2. Sie müssen eine ID für die Schaltfläche in XML festlegen
  3. Suchen Sie die ID im Controller und legen Sie ein Abhörereignis fest
  4. Anschließend implementieren Sie onClickdie Methode
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();
        }
    }

3. Wechseln Sie zwischen Aktivitäten und Datenübertragung

3.1 Sprungseite

Rufen Sie zuerst den Wertinhalt ab und springen Sie dann mit Intent. Weitere Informationen finden Sie im Beispielcode

//执行用户登录
    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 Daten empfangen

Seite B empfängt Daten

@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. Seitenlayout auflisten

4.1 Erstellen Sie eine neue Unterseite

Erstellen Sie eine neue XML-Datei für das Layout jeder Zeile

<?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 Daten vorbereiten

Erstellen Sie ein neues Datenstrukturobjekt und bestimmen Sie das Datenformat

Es werden drei Variablen definiert, und die entsprechende Zugriffsmethode kann automatisch durch die Generierungsfunktion des Editors generiert werden

package site.qingscan.qingting;

import java.io.Serializable;

public class Account implements Serializable {

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

4.3 Datenanpassung

Erstellen Sie einen neuen Adapter

Rendern Sie die Seite und die Daten

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 Kombinierte Anrufe

Aufruf zur Aktivität

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. Netzwerkanfrage

5.1 POST-Anfrage

Definieren Sie zunächst eine Funktion zum Senden von HTTP-Paketen. Der Code lautet wie folgt

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 Sub-Thread-Aufruf

Netzwerkanforderungen können im Hauptthread nicht ausgeführt werden und es muss ein neuer Thread erstellt werden

protected void userLogin() {

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

Es ist zu beachten, dass für den Zugriff auf das Netzwerk eine Genehmigung erforderlich ist

Im AndroidManifest.xmlDatei <manifest>-Tag hinzufügen

<uses-permission android:name="android.permission.INTERNET" />

Autor: Tang Qingsong

Datum: 28. Juni 2022

Supongo que te gusta

Origin blog.csdn.net/u013431141/article/details/125525532
Recomendado
Clasificación