ارسال پست به webview در اندروید

منتشرشده توسط حامد قنبری در تاریخ

یکی از پرکاربردترین ابزارهای مورد استفاده در اندروید استودیو ، webview است ، که امکان استفاده از صفحات وب را در محیط اندروید فراهم ساخته است. از این رو ، با استفاده از ویژگی های موجود برای مدیریت این صفحات در محیط اندروید می توان بدون اتلاف وقت، برنامه ها را به حداکثر کارایی رساند. در مثالی که برایتان توضیح خواهیم داد درخواهید یافت که چگونه با اندکی خلاقیت می توان  بدون صرف وقت و انرژی به اهداف مورد نظر خود دست یافت. مثال ما از لحاظ ساختار جنبه های آموزشی بسیاری دارد و لیکن تاکید ما بر روی یک موضوع از باب اهمیت بارز آن موضوع است از این رو در این آموزش افزون بر یادگیری موضوع اصلی مقاله یعنی نحوه پست کردن اطلاعات به صفحات وب در داخل خود برنامه، می توان به آموزش فراخوری همچون برنامه نویسی تنظیمات مربوط به وب ویو، progress bar  و … دست یافت.البته لازم به ذکر است که برای بهره گیری بیشتر از آموزش، آشنایی با زبان php و نوشتن برنامه سمت سرور برای دریافت requestبرنامه ها ضروری است. البته لازم نیست زیاد نگران باشید چراکه همگام با اموزش برنامه نویسی اندروید می توانید زبان به php را یاد بگیرد.

پروژه جدیدی را در اندروید استودیو یا اکلیپس ایجاد کنید

   اکلیپس :File ⇒ New Android ⇒ Application Project

اندروید استودیو :File ⇒ New  ⇒ New Project

 نام اکتیویتی ابتدایی و اصلی خود  را MainActivity بگذارید.

 کلاس جدیدی را از پکیج اصلی  به پروژه اضافه کنید و نام آن را webView بگذارید.( برای این کار روی پکیج اصلی راست کلیک کرده و از منوی new گزینه java  را انتخاب کنید و در پنجره ظاهر شده نام آن را  webView بگذارید).

به دنبال ایجاد کلاس جدید webView، از مسیر res ⇒ layout لایوت جدیدی را ایجاد کرده و نام آن را activity_webview بگذارید. البته در کنار لایوت ایجاد شده لایوت دیگری به نام activity_main وجود دارد که لایوت اکتیویتی اصلی یا همان MainActivity است.

در مسیر res ⇒ layout لایوت activity_main  را باز کرده و کدهای Xml آن را بدین صورت می نویسیم:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.site.psrd.webview.MainActivity">
<EditText
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:id="@+id/username"
    android:textAlignment="center"
    android:hint="username"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="26dp" />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:id="@+id/password"
        android:hint="password"
        android:textAlignment="center"
        android:layout_below="@+id/username"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="40dp" />
    <Button
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:id="@+id/send"
        android:text="send"
        android:textAlignment="center"
        android:layout_below="@+id/password"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="68dp" />
</RelativeLayout>


بعد از افزودن کدهای فوق به لایوت اکتیویتی اصلی برنامه یعنی activity_main ، به سراغ کدهای کلاس جاوای همین اکتیویتی می رویم. کدهای کلاس جاوای MainActivity به شرح زیر خواهد بود:



import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends AppCompatActivity {
    private WebView webView;

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


     final  EditText user = (EditText)findViewById(R.id.username);
      final  EditText pass = (EditText)findViewById(R.id.password);
        Button sendbtn  = (Button)findViewById(R.id.send);
        sendbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String uservalue = user.getText().toString();
                String passwordvalue = pass.getText().toString();
                Intent Myintent = new Intent(getApplicationContext(), Webview.class);
                Myintent.putExtra("keypost1", uservalue);
                Myintent.putExtra("keypost2", passwordvalue);
                startActivity(Myintent);
            }
        });
    }
}

بعد از افزودن کدهای زیر به کلاس MainActivity به سراغ لایوت  متناظر کلاس webView یعنی activity_webview رفته و کدهای xml آن را به این ترتیب می نویسیم:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.site.psrd.webview.MainActivity">

    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/webVew">
    </WebView>
</RelativeLayout>


بعد از نوشتن لایوت فوق که شامل وب ویو با مشخصات فوق می باشد سراغ کلاس جاوای WebView می رویم و کدهای آن را به این صورت می نویسیم:


import android.app.ProgressDialog;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import org.apache.http.util.EncodingUtils;


public class Webview extends AppCompatActivity {
    private WebView webView;
    String url = "http://psrd.ir/fixurl/postwebview.php";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview);

        webView = (WebView) findViewById(R.id.webVew);
        startWebView(url);

        }

    private void startWebView(String url) {


        webView.setWebViewClient(new WebViewClient() {
            ProgressDialog progressDialog;

             
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            //Show loader on url load
            public void onLoadResource(WebView view, String url) {
                if (progressDialog == null) {
                    // in standard case YourActivity.this
                    progressDialog = new ProgressDialog(Webview.this);
                    progressDialog.setMessage("کمی منتظر بمانید");
                    progressDialog.setIndeterminate(true);
                    progressDialog.setCancelable(false);
                    progressDialog.getWindow().setGravity(Gravity.CENTER);
                    progressDialog.show();
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        public void run() {
                            progressDialog.dismiss();
                        }
                    }, 5000);
                }

                }


        });

        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                return super.onJsAlert(view, url, message, result);
            }
        });

        // Javascript inabled on webview
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().getAllowContentAccess();
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setScrollbarFadingEnabled(false);
        webView.getSettings().setBuiltInZoomControls(false);
        CookieSyncManager.createInstance(this);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        WebSettings ws = webView.getSettings();
        webView.getSettings().setSaveFormData(false);
        webView.clearCache(true);
        webView.clearHistory();
        webView.getSettings().setSupportMultipleWindows(true);
        webView.loadUrl(url);
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            String myuser = extras.getString("keypost1");
            String mypass = extras.getString("keypost2");
            Toast.makeText(Webview.this, mypass + "-------" + myuser, Toast.LENGTH_LONG).show();
            String postData = "user=" + myuser + "&password=" + mypass;
            webView.postUrl(url, EncodingUtils.getBytes(postData, "utf-8"));
        }

    }

    @Override

    public void onBackPressed() {
        if(webView.canGoBack()) {
            webView.goBack();
        } else {
            // Let the system handle the back button
            super.onBackPressed();
        }
        finish();
    }
}


و در نهایت مجوز یا همان premission دسترسی به اینترنت را که به شکل زیر می باشد :

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

به AndroidManifest.xml اضافه می کنیم:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.site.psrd.webview">
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Webview"
            android:label="@string/title_activity_webview"
            android:theme="@style/AppTheme.NoActionBar">
        </activity>
    </application>

</manifest>


بعد اتمام کدنویسی در محیط برنامه نویسی اندروید به منظور تعیین url یا همان آدرس محل پست، کدهای php را را به شکل زیر در محل تعیین شده در سرور خودتان در قالب فایل php ایجاد کنید. البته آدرس بکار رفته در پروژه به شکل ثابت در سرور سایت ما وجود دارد و می توانید پروژه را بدون داشتن سرور نیز اجرا کنید.کدهای php نیز بدین صورت خواهد بود :


<?php
if(isset($_POST['user']) && isset($_POST['password'])){
    $user= $_POST['user'];
    $user = htmlspecialchars($user);
    $user = strip_tags($user);
         
    $password = $_POST['password'];
    $password = htmlspecialchars($password);
    $password = strip_tags($password);
         
    echo "user : ".$user." --- password : ".$password."";
}
?>

حال می توانید  پروژه را اجرا کرده و آن را در پروژه خودتان به هرشکلی که دوست دارید بکارببرید.

برای دانلود سورس برنامه اینجا کلیک کنید.

برای دانلود فایل apk اینجا کلیک کنید

 

 کپی برداری از محتوای سایت psrd، ممنوع بوده و پیگرد قانونی دارد. (تنها استفاده شخصی کاربران ، مجاز است) (کپی برداری توسط سایر وب سایت ها  غیرقانونی بوده و در صورت رویت به ستادسازماندهی اطلاع داده خواهد شد.

.


0 دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --