Android讀取XML實現軟體自動登陸
嘿嘿,大家好又見面了,這次我們不在學習那些乾貨,來點有趣的,大家都知道在我們日常生活中有很多可以自動登陸的軟體,例如:某寶,某東,這些軟體都實現了自動登陸,這次呢,我們們也不能落後是吧,我們們也來實現個自動登陸的小程式,不過我們們這個自動登陸的小程式可不想淘寶 京東那麼的高大上,因為我們實現的都是一些簡單的小程式,他們實現自動登陸的例子,我們們後面再聊,嘿嘿(腦補下,是賤賤的微笑)。好了廢話不多少,教程開始。
我在這裡準備了一個XML檔案,你們測試的時候呢在sd卡中建立一個名字為logi2.xml的檔案,把下面的程式碼複製進去就可以了:就這一點不是很多
<?xml version="1.0" encoding="utf-8"?>
<persons>
<person id="1">
<name>張三</name>
<age>20</age>
</person>
</persons>
大家想想我們應該如何實現這個功能呢,我們首先是需要把xml裡面的資料讀取出來,然後在進行解析,得到我們想要的賬號密碼還有特徵符(我自己編的名字就是判斷當前是否設定自動登陸,牛逼吧。
我們先來開啟儲存賬號密碼的xml檔案,我的檔案放在了sd卡的根目錄。
開啟檔案:
File file = new File(Environment.getExternalStorageDirectory(), "login2.xml");
fileInputStream = new FileInputStream(file);
開啟檔案我們會得到一個輸入流,這個輸入流我們設定成全域性的變數
我們再來建立一個SAX的class檔案,用於解析xml檔案:
在這個檔案裡建立一個getSAX的方法,引數是輸入流(fileInputStream),返回型別是List<LoginBean>,這裡先不要著急,我們的LoginBean會在後面建立。
//建立一個SAX解析工廠
SAXParserFactory factory = SAXParserFactory.newInstance();
//得到一個SAX解析器
SAXParser parser = factory.newSAXParser();
//解析方法 這個由自己建立的一個類
SAXHandler handler = new SAXHandler();
//執行 這裡的inputstream就是引數傳遞進來的
parser.parse(inputStream,handler);
//拿到返回值
return handler.getLoginBeans();
這裡就是SAX解析XML的程式碼,但是這些還是不夠的,我們還需要一個SAXHandler來處理,我先把SAX類的程式碼拿出來讓大家看看吧:
package com.sang.carr.readxml;
import org.xml.sax.SAXException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SAX {
public static List<LoginBean> getSAX(InputStream inputStream) {
try {
//建立一個SAX解析工廠
SAXParserFactory factory = SAXParserFactory.newInstance();
//得到一個SAX解析器
SAXParser parser = factory.newSAXParser();
//解析方法 這個由自己建立的一個類
SAXHandler handler = new SAXHandler();
//執行
parser.parse(inputStream,handler);
//拿到返回值
return handler.getLoginBeans();
} catch (Exception e) {
e.printStackTrace();
}
return new ArrayList<>();
}
}
我們在建立一個SAXHanlder的類,他繼承DefaultHandler類
還需要實現它的四個方法,分別是:
startDocument | 開始讀取文件 |
endDocument | 結束讀取文件 |
startElement | 開始讀取元素 |
endElement | 結束讀取元素 |
characters | 讀取字元 |
先看看這四方法實現的什麼功能吧:
開始讀取文件:
@Override
public void startDocument() throws SAXException {
super.startDocument();
loginBeans = new ArrayList<LoginBean>();
}
這個裡面因為我們使用一個List集合用來儲存LoginBean,所以在開始讀取文件的時候我們需要建立一個List集合
結束讀取文件:
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
這裡什麼也沒有做
開始讀取元素:
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
tag = localName;
if (tag.equals("person")) {
loginBean = new LoginBean();
loginBean.setId(attributes.getValue("id"));
}
}
在這裡們建立一個全域性變數的String型別,用來儲存localName,因為我們在別的方法裡還需要用到
判斷tag的內容是否是person,如果是的話建立一個LoginBean的全域性變數,並且設定LoginBean的id值,這裡的attributes.getValue("id") 是通過id來獲取到xml的person的屬性,這個屬性的名字是id。
結束讀取元素:
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
if (localName.equals("person")) {
loginBeans.add(loginBean);
}
}
這裡沒有什麼可說的,當結束讀取元素的時候把loginbean加入到loginbeans中就可以了。
讀取字元:
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String data = new String(ch, start, length);
if (data != null && tag != null) {
if(tag.equals("name")){
loginBean.setName(data);
}else if(tag.equals("age")){
loginBean.setAge(data);
}
}
}
這是這三個引數的解釋:
然後我們根據節點的名稱來設定相應的屬性。
上面主要的模組介紹完了,我們來看下全部的程式碼
下面是整個專案的全部程式碼
MainActivity.java
package com.sang.carr.readxml;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.InputStream;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private Button read;
private FileInputStream fileInputStream;
private String[] list_fenge;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
geData();
zidong();
// read.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
//
// }
// });
}
//自動登陸方法
private void zidong(){
List<LoginBean> list = SAX.getSAX(fileInputStream);
Log.d("TT", list.toString());
list_fenge = list.toString().split(","); //分割文字 我們解析完XMl後的toString方法的返回格式是[,1,張三,20]使用,
//作為分隔符分割成字串陣列,關於返回格式請看LoginBean.java
Log.d("SS", list_fenge[1]);
Log.d("GG", list_fenge[2]);
Log.d("CC", list_fenge[3]);
login();
}
//判斷是否設定自動登陸 1為自動登陸
private void login() {
if (list_fenge[1].equals("1")) {
if (list_fenge[2].equals("張三") && list_fenge[3].equals("20")) {
tv.setText("登陸成功");
}else{
tv.setText("登陸失敗");
}
}
}
//初始化控制元件
private void init() {
read = findViewById(R.id.readSd);
tv = findViewById(R.id.tv);
}
//獲取到資料
private void geData() {
File file = new File(Environment.getExternalStorageDirectory(), "login2.xml");
try {
fileInputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
// String Line = "";
// StringBuffer sb = new StringBuffer();
// while ((Line = bufferedReader.readLine()) != null) {
// sb.append(Line);
// }
// bufferedReader.close();
// Log.d("TT", sb.toString());
// } catch (Exception e) {
// e.printStackTrace();
// }
}
}
SAX.java
package com.sang.carr.readxml;
import org.xml.sax.SAXException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SAX {
public static List<LoginBean> getSAX(InputStream inputStream) {
try {
//建立一個SAX解析工廠
SAXParserFactory factory = SAXParserFactory.newInstance();
//得到一個SAX解析器
SAXParser parser = factory.newSAXParser();
//解析方法 這個由自己建立的一個類
SAXHandler handler = new SAXHandler();
//執行
parser.parse(inputStream,handler);
//拿到返回值
return handler.getLoginBeans();
} catch (Exception e) {
e.printStackTrace();
}
return new ArrayList<>();
}
}
SAXHandler.java
package com.sang.carr.readxml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import java.util.ArrayList;
import java.util.List;
public class SAXHandler extends DefaultHandler {
private List<LoginBean> loginBeans;
private LoginBean loginBean;
private String tag;
@Override
public void startDocument() throws SAXException {
super.startDocument();
loginBeans = new ArrayList<LoginBean>();
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
tag = localName;
if (tag.equals("person")) {
loginBean = new LoginBean();
loginBean.setId(attributes.getValue("id"));
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
if (localName.equals("person")) {
loginBeans.add(loginBean);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String data = new String(ch, start, length);
if (data != null && tag != null) {
if(tag.equals("name")){
loginBean.setName(data);
}else if(tag.equals("age")){
loginBean.setAge(data);
}
}
}
public List<LoginBean> getLoginBeans() {
return loginBeans;
}
}
LoginBean.java
package com.sang.carr.readxml;
public class LoginBean {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
// return "LoginBean{" +
// "name='" + name + '\'' +
// ", age='" + age + '\'' +
// '}';
return "," + id + "," + name + "," + age + ",";
}
}
軟體介面XMl
<?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/readSd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="讀取SD卡檔案"/>
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
這個就是完整的程式自動登陸的小程式,
效果圖:
相關文章
- linux 實現開機自動登陸Linux
- python 獲取excel資料 自動登陸PythonExcel
- JS實現登陸介面JS
- Unity 讀取xmlUnityXML
- koa2+vue實現登陸以及是否登陸控制Vue
- vnc登入,4個vnc登陸的軟體VNC
- java使用jaxb解析XML(含根據xml自動生成實體類)JavaXML
- js實現回車登陸JS
- 直播平臺軟體開發,登陸時獲取當前時間
- 直播軟體搭建,Android實現文字滾動播放效果Android
- 使用JavaCV實現讀取視訊資訊及自動擷取封面圖Java
- 軟體是實現資料自動流動的核心
- Selenium使用Cookie實現自動登入Cookie
- 中介軟體---登陸認證授權---Shiro
- [xmlbeans]自動生成讀寫xml的java類XMLBeanJava
- Vue學習:實現使用者沒有登陸時,訪問後自動跳轉登入頁面Vue
- 在Java中獲取Android端登陸的裝置資訊JavaAndroid
- Python自動登入QQ的實現示例Python
- 序列化篇 生成xml 以及讀取xmlXML
- 直播平臺軟體開發,一個簡單的Android登入實現demoAndroid
- Java系列:讀取XML檔案JavaXML
- C#讀取Xml檔案C#XML
- 自動化驗證碼登入如何實現?
- 推薦一個軟體自動生成介面文件(帶實現)
- Node.js實現前後端互動——使用者登陸Node.js後端
- Nuxt 實現使用者鑑權登陸UX
- Go 語言實現 QQ 掃碼登陸Go
- Java Web簡單登陸功能的實現JavaWeb
- playwright自動登入獲取cookie/ckCookie
- 恆訊科技解讀:TikTok常用的登陸節點軟體V2ray配置教程
- BPI-M4 Berry自動登陸及關閉桌面
- SharedPreferences實現記住密碼----自動登入功能密碼
- ssh直接帶密碼登入Linux,Linux自動密碼登陸利器sshpass密碼Linux
- android 短視訊開發,使用者選擇記住密碼,再次登入自動讀取儲存密碼Android密碼
- C#程式實現軟體開機自動啟動的兩種常用方法C#
- 用python登入WeChat 實現自動回覆(非常詳細)Python
- Android實現輸入手機號時自動新增空格Android
- 使用 Fastlane 實現 iOS 跟 Android 自動打包指令碼ASTiOSAndroid指令碼