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
- Stellen Sie ein Paket vor, das auf Ereignisse hört
- Sie müssen eine ID für die Schaltfläche in XML festlegen
- Suchen Sie die ID im Controller und legen Sie ein Abhörereignis fest
- Anschließend implementieren Sie
onClick
die 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.xml
Datei <manifest>
-Tag hinzufügen
<uses-permission android:name="android.permission.INTERNET" />
Autor: Tang Qingsong
Datum: 28. Juni 2022