本篇內(nèi)容介紹了“Android登錄界面怎么編寫”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)專注于南安網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供南安營(yíng)銷型網(wǎng)站建設(shè),南安網(wǎng)站制作、南安網(wǎng)頁設(shè)計(jì)、南安網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造南安網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供南安網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
這個(gè)是學(xué)編程的時(shí)候必須要學(xué)的,這次我們就不接數(shù)據(jù)庫來操作。也沒有注冊(cè)界面,直接就是一個(gè)簡(jiǎn)單的登錄界面。
demo還是按照之前的改。恩,反正我會(huì),我就要偷懶。
首先一個(gè)用戶名的框框。
然后一個(gè)登錄密碼的框框。
然后還是一個(gè)登錄按鈕
預(yù)覽一下我們的界面
好丑,做一個(gè)簡(jiǎn)單的調(diào)整,整體代碼如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.hanlei.first_demo.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/name" android:hint="請(qǐng)輸入用戶名" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/password" android:hint="請(qǐng)輸入密碼" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/bt" android:text="Login"/></LinearLayout>
恩,為了像一個(gè)登錄界面,我把name也改了。
所以重新綁定。
login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (name.getText().toString().equals("zhuzhu")&&Integer.parseInt(ps.getText().toString())==520) { startActivity(new Intent(MainActivity.this,Main2Activity.class)); } } });
這里涉及到一個(gè)知識(shí)點(diǎn)。
java String 類型如何轉(zhuǎn)換為int類型。
簡(jiǎn)單的來說:
Integer.parseInt();
就可以轉(zhuǎn)換了
這里突然想到萬一不輸入數(shù)字怎么辦。恩,去改下規(guī)范。
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/password" android:inputType="number" android:hint="請(qǐng)輸入密碼" />
這里加了一行只允許輸入數(shù)字。
分析嘛,很多次了。老規(guī)矩
我們找到邏輯判斷的地方$1
.class Lcom/example/hanlei/first_demo/MainActivity$1; .super Ljava/lang/Object; .source "MainActivity.java"# interfaces.implements Landroid/view/View$OnClickListener;# annotations.annotation system Ldalvik/annotation/EnclosingMethod; value = Lcom/example/hanlei/first_demo/MainActivity;->onCreate(Landroid/os/Bundle;)V.end annotation .annotation system Ldalvik/annotation/InnerClass; accessFlags = 0x0 name = null .end annotation# instance fields.field final synthetic this$0:Lcom/example/hanlei/first_demo/MainActivity;# direct methods.method constructor <init>(Lcom/example/hanlei/first_demo/MainActivity;)V .locals 0 .param p1, "this$0" # Lcom/example/hanlei/first_demo/MainActivity; .prologue .line 24 iput-object p1, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; invoke-direct {p0}, Ljava/lang/Object;-><init>()V return-void .end method# virtual methods.method public onClick(Landroid/view/View;)V .locals 4 .param p1, "v" # Landroid/view/View; .prologue .line 27 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->name:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 const-string v1, "zhuzhu" invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_0 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v0 const/16 v1, 0x208 if-ne v0, v1, :cond_0 .line 29 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; new-instance v1, Landroid/content/Intent; iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; const-class v3, Lcom/example/hanlei/first_demo/Main2Activity; invoke-direct {v1, v2, v3}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V .line 31 :cond_0 return-void .end method
重點(diǎn)邏輯就是如何判斷登錄的部分
if-eqz v0, :cond_0 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v0 const/16 v1, 0x208 if-ne v0, v1, :cond_0 .line 29 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; new-instance v1, Landroid/content/Intent; iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; const-class v3, Lcom/example/hanlei/first_demo/Main2Activity; invoke-direct {v1, v2, v3}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V
我們看到了兩個(gè)if語言
整個(gè)邏輯就是先進(jìn)行一個(gè)判斷,然后進(jìn)行另外一個(gè)判斷。就是滿足第一個(gè)if語句,然后滿足第二個(gè)if語句才到結(jié)束。
這些smali代碼就是我們之前分析過很多次的語句,沒有什么難的地方,都很簡(jiǎn)單的。
我們來嘗試破解。
既然有if語句進(jìn)行判斷,那我把if語句刪了。編程現(xiàn)在這個(gè)樣子:
invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 const-string v1, "zhuzhu" invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 這里刪除if語句 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v0 const/16 v1, 0x208 這里刪除if語句 .line 29 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; new-instance v1, Landroid/content/Intent; iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; const-class v3, Lcom/example/hanlei/first_demo/Main2Activity; invoke-direct {v1, v2, v3}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V .line 31 :cond_0 return-void
然后保存進(jìn)行反編譯。
不刪除if語句,但是我更改if語句的邏輯。比如本來是相等才可以,我改成不相等就繼續(xù)運(yùn)行。
第一個(gè)判斷語句是:
if-eqz v0, :cond_0
if-eqz的含義就是 如果是0,就跳轉(zhuǎn)到 cond_0
現(xiàn)在我們修改成:
if-nez v0,:cond_0
if-nez的含義是,如果不是0,就跳轉(zhuǎn)到cond_0
第二個(gè)判斷語句是:
if-ne v0, v1, :cond_0
if-ne的含義就是如果v0!=v1就跳轉(zhuǎn)。
現(xiàn)在我們改成:
if-eq v0, v1, :cond_0
if-eq的含義就是如果相等再進(jìn)行跳轉(zhuǎn)。
測(cè)試成功,不想錄圖片了。
既然最后一定要走的是第二個(gè)判斷里的內(nèi)容,那么我們使用goto語句直接進(jìn)去不就好了。
首先設(shè)置一個(gè) cond_1
然后goto :cond_1
.method public onClick(Landroid/view/View;)V .locals 4 .param p1, "v" # Landroid/view/View; .prologue .line 27 goto :cond_1 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->name:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 const-string v1, "zhuzhu" invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_0 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText; invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText; move-result-object v0 invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v0 const/16 v1, 0x208 if-ne v0, v1, :cond_0 :cond_1 .line 29 iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; new-instance v1, Landroid/content/Intent; iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity; const-class v3, Lcom/example/hanlei/first_demo/Main2Activity; invoke-direct {v1, v2, v3}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V .line 31 :cond_0 return-void .end method
測(cè)試成功。
可能還有很多種繞過的方法,這里就不一一展示了。
既然是登錄,那么必然就要有一個(gè)對(duì)比的存在,我只要知道是用什么去對(duì)比的,我把需要對(duì)比的東西進(jìn)行輸出,方便我們查看是不是更好呢。
const-string v1, "zhuzhu" invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_0
這里很明顯,用v0和v1進(jìn)行比較,如果是就返回1,如果不是就返回0
const/16 v1, 0x208 if-ne v0, v1, :cond_0
定義一個(gè)v1寄存器,然后用v0和v1比較看是否一致如果一致就繼續(xù)向下運(yùn)行。
0x208就是16進(jìn)制形式,進(jìn)行轉(zhuǎn)換,就知道了我們密碼是多少了,之后在登錄輸出即可。當(dāng)然這個(gè)是可有看到的密碼,如果接入了數(shù)據(jù)庫就會(huì)變成不可見的密碼,到時(shí)候就可以進(jìn)行動(dòng)態(tài)調(diào)試來對(duì)密碼進(jìn)行一個(gè)輸出了。
大神說過一句話叫做,和游戲無關(guān)的都是廣告,我們普遍說的廣告就是,一些恩,很煩人的東西。
植入廣告的目的主要是
(1) 做推廣
(2)能賺到錢
用一個(gè)載體去承載廣告,然后顯示出來。使用的技術(shù)用靜態(tài)布局,或者使用動(dòng)態(tài)加載等方式。還是來看一下如果植入廣告的具體操作吧。
有米廣告,反正我被坑了整整兩天,什么都沒搞成功,還被折騰的夠嗆,不過雖然沒有搞出什么成果來,但是對(duì)有米廣告倒是有了一個(gè)很深的認(rèn)識(shí),這個(gè)坑人的東西,好氣。
最后我只是搞成功了一個(gè)這個(gè)東西。
先來說說,我遇到的坑。希望有人研究的時(shí)候可以節(jié)約時(shí)間。
Error:Execution failed for task ':processDebugManifest'. > [:YoumiSdk_v7.5.1_2018-01-16:] C:\Users\hanlei\Desktop\ls\YoumiAndroidSdk\demo\normaldemo\build\intermediates\exploded-aar\YoumiSdk_v7.5.1_2018-01-16\AndroidManifest.xml:23:3-29:15: Error: Invalid instruction 'targetApi', valid instructions are : REMOVE,REPLACE,STRICT
看到這個(gè)鬼東西了木有,網(wǎng)上搜索都說需要換一個(gè)sdk,但是官網(wǎng)只提供最新的sdk,或許是我沒找到。
果斷換sdk。
而且官方給的demo導(dǎo)入到Android Studio 里用不了,也是這個(gè)問題。
解決方案:
Androidmanifest.xml里加這一句,可能有用。
<uses-sdk tools:overrideLibrary="YoumiSdk_v7.4.0_2017-05-18" />
毫不留情就出問題了。
Error:Execution failed for task ':app:processDebugManifest'. > [:YoumiSdk_v7.5.1_2018-01-16:] C:\Users\hanlei\Desktop\ls\YoumiAndroidSdk\demo\demo3\app\build\intermediates\exploded-aar\YoumiSdk_v7.5.1_2018-01-16\AndroidManifest.xml:23:3-29:15: Error: Invalid instruction 'targetApi', valid instructions are : REMOVE,REPLACE,STRICT
換個(gè)arr版本接著搞。
記得改配置文件
果然換了一個(gè)arr包馬上就對(duì)了,太不友好了。
我們接著初始化。
廣告嘛,配置權(quán)限權(quán)限掃描的才可以運(yùn)行。
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
應(yīng)該同步做一件事情。
應(yīng)該在我的小本本上同步做一個(gè)記錄。
compile 'com.android.support:support-v4:xx.x.x'
這里的v4:xx.x.x一定要和上面的一致,直接看圖:
“Android登錄界面怎么編寫”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
新聞名稱:Android登錄界面怎么編寫
文章位置:http://aaarwkj.com/article44/ijpcee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站營(yíng)銷、做網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)