java - 使用 Android 应用程序 (Java) 登录网站

标签 java android android-webservice

我目前正在尝试制作一个应用程序,允许您登录您的帐户并查看需要显示的任何数据。

我没有使用 webview,而是为了显示信息,我将从 HTML 解析数据,然后从那里开始工作,提取我需要显示的数据。我将在下面发布我的应用程序的代码。

我需要帮助的是弄清楚如何使用我的应用程序登录网站。

基本上,步骤如下:

1.输入用户名

2.输入密码

3.按登录按钮

4.发送用户名和密码到网站

5.如果 - 网站返回“成功登录”,则继续并从 HTML 解析下一页,否则 - 显示“错误的用户名或密码”

但是,我不知道如何让我的应用程序登录,或者至少在网站的登录字段中输入数据,以便我至少可以以某种方式获得响应。

我对此很陌生,所以请至少为我指出正确的方向,以便我能够弄清楚。非常感谢。

    package com.example.app;

    import androidx.appcompat.app.AppCompatActivity;

    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;

    public class MainActivity extends AppCompatActivity {
        String data;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            TextView LoginTitle = findViewById(R.id.tvLoginTitle);
            EditText Username = findViewById(R.id.etUsername);
            EditText Password = findViewById(R.id.etPass);
            Button Login = findViewById(R.id.btLogin);

            Login.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    new Parse().execute();
                    Intent intent = new Intent(MainActivity.this,UserAccount.class);
                    intent.putExtra("data",data);
                    startActivity(intent);
                }
            });

        }

        public class Parse extends AsyncTask<Void, Void, Void> {
            @Override
            protected Void doInBackground(Void... voids) {
                try {
                    Document WebPage = Jsoup.connect("https://myurl").get();
                    Log.d("data", WebPage.toString());
                    data=WebPage.toString();
                } catch(Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            //Used in guide, however, my implementation of the app doesn't seem to need this.
        }
    }
}

最佳答案

我不确定您想通过在那里记录网页内容来做什么。 您首先需要做的是检查“浏览器”是否启用了 Javascript,但在您的情况下,这是没有意义的,因为您正在使用自己的 WebView。只检查 JS 是否启用仍然是明智的。

下一步显然涉及到使用 JS,因为我要求你检查它是否已启用。这是代码,但请注意,我没有对此进行测试,但这是朝着正确方向迈出的一步:

    public void loginUser(View view) {

        InputMethodManager inputMan = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(layout.getWindowToken(), 0);


        webView.loadUrl("https://yourwebsite.net");
        webView.setVisibility(View.INVISIBLE);
        webView.setWebViewClient(new WebViewClient() {

            public void onPageFinished(WebView view, String url) {
                webView.loadUrl("javascript: {" + "document.getElementById('login_account').value = '" + "USERNAME" + "';" + "document.getElementById('login_password').value = '" + "PASSWORD" + "';" + "document.getElementById('submit').click();" + "};");
                 }

            public void onPageFinished2(WebView view, String url) {
                webView.loadUrl(url);
            }
        });

        webView.clearCache(true);
        webView.clearHistory();


    WebView webView2 = (WebView) this.findViewById(R.id.web_view);

    String url = "https://yourwebsite.net";
    webView2.loadUrl(url);

}

需要注意的一些要点:为了安全起见,请将 login_account 和 login_password 的值更改为人们无法轻易猜到的内容。

关于java - 使用 Android 应用程序 (Java) 登录网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61306061/

相关文章:

java - Android 通过.net webservices 发送推送通知

java - 如何上传不同的上下文配置类?

Android HCE 响应 6A82

android - 如何从 Fresco Simple drawee 中删除缓存

java - HttpURLConnection : What is the right way to read data from a WebService, 逐字符还是逐行?

Android调用包含url中参数的XML Webservice

java - 在 Java Arraylist 中存储用户输入

java - 返回字符串的函数的 C++ 执行顺序

java - 如何从 Eclipse java 项目中删除 Maven?

android - react native 后退按钮处理程序