New Lesson

For Downloading the new lesson you have to finish  a survey.  Then We will Send you The Post : 


If you are Now in a Desktop Computer  Go to the link below : 

For Desktop User



If you are Now in an Android Mobile Device  Go to the link below : 

For Mobile User 




Online Market Place

Click These Products Below , Just See Amazon Market Place - The Big Online E-commerce Market Place in the World, And if you Plan to Earn Money by Affiliate Marketing Blog so click the Pictures below to See How the link refers to Amazon :
Baby Diapar :




Gents Shocks :





Diapar: Water Wipes:





Diapar: pampars :





Diapar : Bamboo Nature :





diapar: Mama Bear : Newborn :





diapar: Huggies :





diapar: pampars: Easyups:





boys under ware:





Mug Show Piece Mommy daddy :





More Amazing Showpiece Mugs


Here



==============================


Alexas smart plug :





Alexa : echo dot :





Alexa echo plus:





Alexa echo Show : The Latest Robot in your Home : 





Lesson: 7 -Image In ImageView and Image in WebView

আমরা প্রথমে এ্যাসেট ফোল্ডারে আরেকটি ইমেজ রাখবো :




এবার ইমেজভিউ.এক্সএমএল ফাইলটি ওপেন করে আরেকটি ইমেজভিউ সেট করবো যার আইডি নাম হবে  ইমেজভিউ২ :

<ImageView    android:id="@+id/imageView2"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_marginBottom="8dp"    android:layout_marginEnd="8dp"    android:layout_marginLeft="8dp"    android:layout_marginRight="8dp"    android:layout_marginStart="8dp"    android:layout_marginTop="8dp"    app:layout_constraintBottom_toBottomOf="parent"    app:layout_constraintEnd_toEndOf="parent"    app:layout_constraintHorizontal_bias="0.28"    app:layout_constraintStart_toStartOf="parent"    app:layout_constraintTop_toTopOf="parent"    app:layout_constraintVertical_bias="0.39"    app:srcCompat="@mipmap/ic_launcher" />




এবার ইমেজভিউ জাভা ফাইল ওপেন করে নিচের কোডটুকু অনক্রিয়েট এর বাইরে লিখুন :

public Drawable loadDrawableFromAssets(Context context, String path)
{
    InputStream stream = null;
    try    {
        stream = context.getAssets().open(path);
        return Drawable.createFromStream(stream, null);
    }
    catch (Exception ignored) {} finally    {
        try        {
            if(stream != null)
            {
                stream.close();
            }
        } catch (Exception ignored) {}
    }
    return null;
}

এবং নিচের কোডটুকু অনক্রিয়েট এর ভেতরে লিখুন :

android.widget.ImageView imageView2 = findViewById(R.id.imageView2);

imageView2.setImageDrawable(loadDrawableFromAssets(getApplicationContext(),"image24.jpg"));

নিচের মত হবে : 





এবার প্রোগ্রামটি রান করুন।


ব্যাখ্যা : আমরা প্রথমে loadDrawableFromAssets এই প্রোগ্রামটি লিখেছি অনক্রিয়েট এর বাইরে। এই প্রোগ্রামে বলা হয়েছে কিভাবে  এ্যাসেট ফোল্ডারের মধ্য থেকে একটি ইমেজকে ড্রয়েবল হিসেবে লোড করবে।
এরপর loadDrawableFromAssets  এই ফাংশনটিকে আমরা অনক্রিয়েট এর মধ্যে কল করেছি এভাবে :
imageView2.setImageDrawable(loadDrawableFromAssets(getApplicationContext(),"image24.jpg"));

সুতরাং, এখন যেখানেই আমরা ইমেজ এর নাম দিয়ে এই ফাংশনটিকে ইমেজভিউ এর জন্য কল করবো সেখানেই ইমজটি প্রদর্শিত হবে। 


=======================

=======================
ঠিক  একই ভাবে ইমেজভিউ লেআউট ফাইলে  আরেকটি ইমেজ ভিউ তৈরী করুন।  
এ্যাসেট ফোল্ডারে আরেকটি ইমেজ রাখুন। 

মনে করি, এক্সএমএল ফাইলে ইমেজভিউ আইডি imageView3

এবং, প্রজেক্ট এ্যাসেট ফোল্ডারে যে ইমেজটি রেখেছি তার নাম image25.jpg


এবার  জাভা ফাইলে আউটসাইড অনক্রিয়েট এ  নিচের ফাংশনটি লিখুন  : 

public Bitmap loadBitmapFromAssets(Context context, String path)
{
    InputStream stream = null;
    try    {
        stream = context.getAssets().open(path);
        return BitmapFactory.decodeStream(stream);
    }
    catch (Exception ignored) {} finally    {
        try        {
            if(stream != null)
            {
                stream.close();
            }
        } catch (Exception ignored) {}
    }
    return null;
}


অনক্রিয়েট এর মধ্যে ফাংশনটি কল করুন এভাবে : 

android.widget.ImageView imageView3 = findViewById(R.id.imageView3);
imageView3.setImageBitmap(loadBitmapFromAssets(getApplicationContext(),"image25.jpg"));

এবার  এ্যাপটি রান করুন। 

উপরের পদ্ধতিগুলোর মধ্যে দেখুন কোন পদ্ধতিতে আপনার ইমেজ সুন্দর ভাবে আসে। সেই পদ্ধতিটিই ব্যবহার করুন। 

*********************
*********************

পূর্ণাঙ্গ কোড : 


আপনাদের সুবিধার্থে নিচে  এক্সএমএল ফাইল এবং জাভা ফাইল পুরো কোড গুলো একসাথে দেওয়া হলো : 

imageview.xml : 
=====================


<ImageView    android:id="@+id/imageView"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_marginBottom="8dp"    android:layout_marginEnd="8dp"    android:layout_marginLeft="8dp"    android:layout_marginRight="8dp"    android:layout_marginStart="8dp"    android:layout_marginTop="8dp"
    android:src="@drawable/ic_launcher_background"    app:layout_constraintBottom_toBottomOf="parent"    app:layout_constraintEnd_toEndOf="parent"    app:layout_constraintHorizontal_bias="0.03"    app:layout_constraintStart_toStartOf="parent"    app:layout_constraintTop_toTopOf="parent"    app:layout_constraintVertical_bias="0.018" />

<ImageView    android:id="@+id/imageView2"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_marginBottom="8dp"    android:layout_marginEnd="8dp"    android:layout_marginLeft="8dp"    android:layout_marginRight="8dp"    android:layout_marginStart="8dp"    android:layout_marginTop="8dp"    app:layout_constraintBottom_toBottomOf="parent"    app:layout_constraintEnd_toEndOf="parent"    app:layout_constraintHorizontal_bias="0.844"    app:layout_constraintStart_toStartOf="parent"    app:layout_constraintTop_toTopOf="parent"    app:layout_constraintVertical_bias="0.056"    app:srcCompat="@mipmap/ic_launcher" />

<ImageView    android:id="@+id/imageView3"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_marginBottom="8dp"    android:layout_marginEnd="8dp"    android:layout_marginLeft="8dp"    android:layout_marginRight="8dp"    android:layout_marginStart="8dp"    android:layout_marginTop="8dp"    app:layout_constraintBottom_toBottomOf="parent"    app:layout_constraintEnd_toEndOf="parent"    app:layout_constraintStart_toStartOf="parent"    app:layout_constraintTop_toTopOf="parent"    app:layout_constraintVertical_bias="0.352"    app:srcCompat="@mipmap/ic_launcher_round" />







এরপর ImageView.java  জাভা আউটসাইড অনক্রিয়েট : 

public Drawable loadDrawableFromAssets(Context context, String path)
{
    InputStream stream = null;
    try    {
        stream = context.getAssets().open(path);
        return Drawable.createFromStream(stream, null);
    }
    catch (Exception ignored) {} finally    {
        try        {
            if(stream != null)
            {
                stream.close();
            }
        } catch (Exception ignored) {}
    }
    return null;
}



public Bitmap loadBitmapFromAssets(Context context, String path)
{
    InputStream stream = null;
    try    {
        stream = context.getAssets().open(path);
        return BitmapFactory.decodeStream(stream);
    }
    catch (Exception ignored) {} finally    {
        try        {
            if(stream != null)
            {
                stream.close();
            }
        } catch (Exception ignored) {}
    }
    return null;
}



এরপর ImageView.java  জাভা   ইনসাইড অনক্রিয়েট : 

       //==========================//1//===========================//       
    android.widget.ImageView imageView = findViewById(R.id.imageView);


        try        {
            // get input stream            InputStream ims = getAssets().open("image28.jpg");
            // load image as Drawable            Drawable d = Drawable.createFromStream(ims, null);
            // set image to ImageView            imageView.setImageDrawable(d);
           // imageView2.setImageDrawable(d);            //now close the stream:            ims .close();
        }
        catch(IOException ex)
        {
            return;
        }

        //==========================//2//=============================//
        final android.widget.ImageView imageView2 = findViewById(R.id.imageView2);
        imageView2.setImageDrawable(loadDrawableFromAssets(getApplicationContext(),"image24.jpg"));




        //===============================//3//===========================//
        android.widget.ImageView imageView3 = findViewById(R.id.imageView3);
        imageView3.setImageBitmap(loadBitmapFromAssets(getApplicationContext(),"image25.jpg"));




==================
সারাংশ :
Lesson 6.1  এবং  Lesson 6.2  তে আমরা   ইমেজভিউতে ইমেজ প্রদর্শনের জন্য এক্স এম এল এর দুটি পদ্ধতি এবং   জাভার তিনটি পদ্ধতি (মোট পাচটি পদ্ধতি)  নিয়ে আলোচনা করলাম  এবং তিনটি ইমেজকে ইমেজ ভিউতে প্রদর্শন করলাম । আমাদের প্রজেক্ট এ্যাসেট ফোল্ডারের তিনটি ইমেজ নিম্নরূপ :



উপরের চিত্রের তিনটি ইমেজকে আমরা তিন ধরণের পদ্ধতিতে  উপরের পূর্ণাঙ্গ  জাভা কোডের মাধ্যমে ইমেজভিউতে প্রদর্শন করিয়েছি। মোবাইলে ছবি তিনটি নিচের মত প্রদর্শিত হবে :




সুতরাং, এই তিন ধরণের মধ্যে আপনার যে ধরণের প্রয়োজন সে অনুযায়ী কোড ব্যবহার করবেন। আর যদি শুধু এক্সএমএল এর মাধ্যমে সিস্টেম ইমেজ প্রদর্শন করতে চান তবে জাভার কলিং কোড গুলো মুছে নিবেন।

===============================
(   নোট :  তবে ইমেজ এর বিভিন্ন সুবিধা ইনষ্ট্যান্ট পাওয়ার জন্য  ইমেজভিউতে না প্রদর্শন করে ওয়েবভিউতে প্রদর্শন করলে ভালো হয়। ইমেজ জুমিং, স্লাইডিং  সহ অনেক সুবিধা পাওয়া যায়।  আমরা ওয়েবভিউ এর লেসনে এ ব্যাপারে আলোচনা করব। ) 
=============================

এই প্রজেক্ট ফাইলটি ডাউনলোড করার জন্য এ্যাডমিন এর সাথে যোগাযোগ করতে পারেন  : 


Lesson 6 - Launcher Activity, Show Image ‍and Create Asset



আমরা প্রথমে একটি Launcer Activity তৈরী করব, এরপর এই এ্যাক্টিভিটি থেকে বিভিন্ন এ্যাক্টিভিটিতে বাটন ক্লিক এর মাধ্যমে যাবো। এবং সেই এ্যাক্টিভিটিগুলোতে বিভিন্ন মেথড যুক্ত করে পর্যায়ক্রমে সেগুলোর কাজ দেখবো । প্রথমে জাভা ফোল্ডারের উপর রাইট বাটনে ক্লিক করে একটি এম্পটি এ্যাক্টিভিটি তৈরী করুন :







জাভা ফাইল নেম এবং লেআউট ফাইল নেম নিচের মত দিন এবং Launcher Activity - তে টিকমার্ক দিয়ে দিন :



এবার ফিনিশ বাটনে ক্লিক করুন।

নিচের চিত্রের মত একটি এ্যাক্টিভিটি তৈরী হবে :




আমরা পুনরায় একটি এ্যাক্টিভিটি তৈরী করব যার নাম দেব ইমেজ ভিউ :










এভাবে মোট দুটি এ্যাক্টিভিটি তৈরী করলাম।



==================


এখন আমরা ‍স্টার্ট এ্যাক্টিভিটিকে লাঞ্চার এ্যাক্টিভিটি হিসেবে তৈরী করব, এজন্য আমরা মেনিফেস্ট ফাইল ওপেন করব। এবং :


<intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>


এই লেখাটুকু শুধুমাত্র স্টার্ট এ্যাক্টিভিটিতে রেখে অন্যান্য এ্যাক্টিভিটি থেকে মুছে দেবো। এই কোডটুকু যে এ্যাক্টিভিটর অধীনে থাকবে সেই এ্যাক্টিভিটিই লাঞ্চার এ্যাক্টিভিটি হয়ে যাবে, অর্থাৎ এ্যাপটি চালু হলে সর্বপ্রথম সেই এ্যাক্টিভিটি ওপেন হবে :





অন্যান্য এ্যাক্টিভিটি থেকে ইন্টেন্ট ফিল্টার লাঞ্চার মুছে ফেলে শুধুমাত্র স্টার্ট এ্যাক্টিভিটিতে রাখতে হবে । যার ফলে মেনিফেস্ট    এর চেহারা   এরকম হবে । নিচের চিত্রে  দেখুন  শুধুমাত্র স্টার্ট এ্যাক্টিভিটির জন্যই ইন্টেন্ট ফিল্টার লাঞ্চার রাখা হলো :





এখন এ্যাপটি চালু করলে স্টার্ট এ্যাক্টিভিটি সর্বপ্রথম চালু হবে।

=================

এবার start.xml ফাইলটি ওপেন করে একটি বাটন যোগ করব :






এবার StartActivity.java ফাইলটি ওপেন করে এই বাটনটিকে ইনিশিয়ালাইজ করে বাটন ক্লিক এর মাধ্যমে যাতে ইমেজ ভিউ নামের এ্যাক্টি ভিটি ওপেন হয় সেই কোড যোগ করব : 




মনে করি বাটনটির আইডি হবে বাটন টু, যেটা এক্সএমএল ফাইলে নির্ধারণ করতে হবে : 


android:id="@+id/button2"



তাহলে জাভা ফাইলে ইনিশিয়ালাইজ হবে : Button button2 = (Button)findViewById(R.id.button2);



এবার বাটন টু এর জন্য অনক্লিক লিসেনার : 


button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

// বাটন টু ক্লিক করলে যা ঘটবে তা এখানে লিখতে হবে । 

}
});



আমরা লিখলাম যে ইমেজ ভিউ ক্নাস নামে একটি এ্যাক্টিভিটি আছে সেটা ওপেন কর : 


Intent i= new Intent(StartActivity.this, ImageView.class);
startActivity(i);



সুতরাং, এখন বাটন টু এর অনক্লিক লিসেনার হবে এরকম : 


Button button2 = (Button)findViewById(R.id.button2);

button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Intent i= new Intent(StartActivity.this, ImageView.class);
startActivity(i);

}
});






এ্যাপটি রান করুন। বাটনে ক্লিক করলে ইমেজভিউ এ্যাক্টিভিটি ওপেন হবে।



=====================


এবার আমরা বাটন টু এর ক্লিক এর মাধ্যমে ইমেজভিউ এ্যাক্টিভিটিতে প্রবেশ করলাম।

এখানে আমরা একটি ইমেজভিউ যোগ করব । প্রথমে এই এ্যাক্টিভিটির লেআউট ফাইলটি ওপেন করে একটি ইমেজভিউ যোগ করি :





উপরের চিত্রের মত করে লিখুন :

android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"


app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.03"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.018"

app:srcCompat="@mipmap/ic_launcher" 
 />

===============

এখন আমরা দেখব যে, কয়েকটি ভাবে একটি ইমেজ ভিউতে যে কোন ইমেজ প্রদর্শন করানো যায়। দেখুন উপরের ইমেজ ভিউ এর সবার শেষের লাইনটি এরকম :


app:srcCompat="@mipmap/ic_launcher"



এর অর্থ হলো রিসোর্স এর আন্ডারে যে মিপম্যাপ নামক ফোল্ডার রয়েছে সেই ফোল্ডারে আইসি লাঞ্চার নামে একটি ইমেজ রয়েছে সেই ইমেজটি প্রদর্শন করা হোক ।





এখন   এ্যাপটি রান করে দেখুন ।



====================

====================



আবার নিচের মত করেও যে কোন ইমেজ প্রদর্শন করানো যায় :

android:src="@drawable/ic_launcher_background"



এখানে দেখুন আগের app:srcCompat এর পরিবর্তে android:src ব্যবহার করা হয়েছে। এবং পুরো লাইনটির অর্থ হচ্ছে, ড্রয়েবল ফোল্ডারের মধ্যে ic_launcher_background নামে যে চিত্রটি রয়েছে তা দেখাও। নিচের চিত্রটি লক্ষ করুন :







এ্যাপটি রান করে দেখুন ।




===============================

এতক্ষণ তো দেখলাম এ্যান্ড্রয়েড স্টুডিওতে রাখা সিস্টেম পিকচার গুলো কিভাবে দেখা যায়। কিন্তু আমরা আমাদের নিজেদের কাষ্টম ইমেজ দেখাতে চাই । তাহলে কি করতে হবে ?




এ্যান্ড্রয়েড স্টুডিও মিনিমাইজ করে রাখুন। এরপর কম্পিউটারের যেখানে আমাদের এই প্রজেক্ট ফাইলটি রাখা আছে সেই স্থানটি ওপেন করতে হবে :







আমাদের প্রজেক্টের মূল ফাইলে যেতে হবে। সেখানে মেইন নামক ফোল্ডারের অভ্যন্তরে assets নামে একটি ফোল্ডার তৈরী করতে হবে :






উপরের চিত্রে দেখুন আমাদের প্রজেক্ট এর নাম হচ্ছে মাই এ্যাপলিকেশন, এরপর সেখান থেকে মেইন নামক ফোল্ডারের মধ্যে আমরা এ্যাসেটস নামক একটি ফোল্ডার ক্রিয়েট করলাম। এখন এই এ্যাসেট নামক ফোল্ডারের মধ্যে আমরা আমাদের ইমেজ রাখবো। এখানে আমরা ইমেজ২৮ নামক একটি ইমেজ রাখলাম :


 

এবার আমরা পুনরায় এ্যান্ড্রয়েড স্টুডিওতে ফিরে আসলে দেখতে পাবো যে, এ্যাসেটস নামে নতুন একটি ফোল্ডার তৈরী হয়েছে এবং সেখানে ইমেজ২৮ নামে একটি ফাইল দেখা যাচ্ছে :





এবার এই ইমেজ২৮ ফাইলটিকে আমরা আমাদের ইমেজভিউতে প্রদর্শন করবো ।


প্রথমে এক্সএমএল ফাইলে আমরা ইমেজভিউ এর আইডি দেখে নেবো :


android:id="@+id/imageView"



এবার আমরা ইমেজভিউ এ্যাক্টিভিটি নামে জাভা ফাইলটি ওপেন করে ইমেজভিউকে ইনিলিয়ালাইজ করবো। এরপর এ্যাসেট ফোল্ডারে রাখা ইমেজ২৮ ফাইলটিকে সেই ইমেজভিউতে প্রদর্শন করবো :



এখানে প্রথমে আমরা ট্রাই / ক্যাচ ব্লকের মাধ্যমে দেখবো :



android.widget.ImageView imageView = findViewById(R.id.imageView);

try
{
// get input stream
InputStream ims = getAssets().open("image28.jpg");
// load image as Drawable
Drawable d = Drawable.createFromStream(ims, null);
// set image to ImageView
imageView.setImageDrawable(d);
//now close the stream:
ims .close();
}
catch(IOException ex)
{
return;
}




এই কোডটুকু  ইমেজভিউ জাভা ফাইলে পেষ্ট করুন :





 প্রোগ্রামটি রান করে দেখুন।


=============================




পরবর্তী লেসন : 7  




এবার  আরেকটি পদ্ধতি :


১। আমরা আরেকটি ইমেজ ফাইল এ্যাসেট ফোল্ডারে রাখব ।


২। আরেকটি ইমেজভিউ এক্সএমএল লেআউট ফাইলে তৈরী করব।


৩। এরপর ইমেজ ওপেন করার জন্য একটি প্রোগ্রাম লিখব এবং প্রোগ্রামটি ইমেজভিউ জাভা

ফাইলের আউটসাইড অনক্রিয়েটে লিখব।


৪। এরপর জাভা অনক্রিয়েটএ সেই প্রোগ্রামটিকে কল করবো।

Google Spread Sheets As Database

Google Spread Sheets As Android Web Database 

এই প্রজেক্টে দুটি পার্ট থাকবে, 

১। এ্যান্ড্রয়েড পার্ট 
২। ওয়েব পার্ট  


======================================================

১। এ্যান্ড্রয়েড পার্ট 

এই  প্রজেক্টের জন্য  আমাদের কয়েকটি আলাদা ক্লাস লাগবে । ক্লাসগুলো হচ্ছে : 


১। InternetConnection
২। Controller
৩। Keys
৪। MyDataModel
৫। InsertData
৬। DownloadData

এখন নিচে এই ক্লাসগুলোর একে একে বর্ণনা  দেখব: 


১। InternetConnection : 

নামেই বোঝা যাচ্ছে যে, এই ক্লাসের মাধ্যমে কি কাজ হবে।  এই ক্লাসের মাধ্যমে আমরা ইন্টারনেট চেক করব। যদি ইন্টারনেট কানেকশন ষ্টাব্লিশড হয়, তাহলে আমাদের নির্দিষ্ট কাজটি শুরু হবে, আর যদি ইন্টারনেট কানেকশন না থাকে তাহলে একটা মেসেজ দেখাবে। 

একটি নতুন ক্লাস তৈরী করার জন্য এখানে যান : 

file > new > java class 

নাম দিন  InternetConnection 

ক্লাসটি ভিজিবল হবার পর  নিচের কোড গুলো পেষ্ট করে দিন  : 


package ..................................;  // (your package name) 

import android.content.Context;
import android.net.ConnectivityManager;
import android.support.annotation.NonNull;


public class InternetConnection {

    /** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */
    public static boolean checkConnection(@NonNull Context context) {
        return  ((ConnectivityManager) context.getSystemService
                (Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null;
    }
}




২। Controller

গুগল স্প্রিড শীট এ ডাটা আপলোড এবং ডাউলোড করার জন্য একটি কন্ট্রোলার লাগবে। যার মাধ্যমে আমরা কোন এ্যড্রসে ডাটা আপলোড করব তা নির্ধারিত হবে। 


উপরের পদ্ধতিতে Controller   নামে একটি ক্লাস তৈরী করে  নিচের কোডগুলো পেষ্ট করে দিন : 



package ....................................;

/**
 * Created by user on 4/15/2018.
 */
import android.support.annotation.NonNull;
import android.util.Log;

import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;

public class Controller {



WAURL="https://script.google.com/macros/s/AKfycbzVuuT0B1CxYFujFv8r5xpppTCksthaYxnCx1ENT-U9D1INHg4/exec?";
    public static final String WAURL="https://script.google.com/macros/s/AKfycbz0LWQfOSKhbh2bd4aHuT1vLqxXTI4cGxKkUneCkVMwytsendw/exec?";


    public static final String RAGISTRATIONURL="https://script.google.com/macros/s/AKfycbx7yPYdrkg_ZnplhQOCxRX7_SFmFr9IQZI1G8oxbn41VLpgGlw/exec?";
                                              
    // EG : https://script.google.com/macros/s/AKfycbwXXXXXXXXXXXXXXXXX/exec?
//Make Sure '?' Mark is present at the end of URL


    private static final String MAIN_URL = "https://script.google.com/macros/s/AKfycbxOLElujQcy1-ZUer1KgEvK16gkTLUqYftApjNCM_IRTL3HSuDk/exec?id=1vsGK30gV4IAW0siWtIACh8BcPtuDOCAFT62ftMVxGCU&sheet=Sheet1";

  
    private static final String PASSWORD_RATE_URL = "https://script.google.com/macros/s/AKfycbxOLElujQcy1-ZUer1KgEvK16gkTLUqYftApjNCM_IRTL3HSuDk/exec?id=1IiU9BDvuVzE7uJXSH7pZ2Qn42_sTk1Xg6pVZyEgXoKE&sheet=Sheet1";



   public static final String TAG = "TAG";
    private static final String KEY_USER_ID = "user_id";

    private static Response response;




    public static JSONObject insertRegistration(String id, String name) {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    //.url(RAGISTRATIONURL+"action=insert&id="+id+"&name="+name)
                     .url(RGISTRATION_URL+"action=insert&id="+id+"&name="+name)

                    .build();
            response = client.newCall(request).execute();
            //    Log.e(TAG,"response from gs"+response.body().string());
            return new JSONObject(response.body().string());


        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "recieving null " + e.getLocalizedMessage());
        }
        return null;
    }




    public static JSONObject readRegistrationData() {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(RGISTRATION_URL_READ+"action=readRegistrationData")
                    .build();
            response = client.newCall(request).execute();
            return new JSONObject(response.body().string());
        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "" + e.getLocalizedMessage());
        }
        return null;
    }




    public static JSONObject readAllData() {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(RGISTRATION_URL_READ)
                    .build();
            response = client.newCall(request).execute();
            return new JSONObject(response.body().string());
        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "" + e.getLocalizedMessage());
        }
        return null;
    }


    public static JSONObject readBibekMonth() {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(BIBEK_MONTH_READ)
                    .build();
            response = client.newCall(request).execute();
            return new JSONObject(response.body().string());
        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "" + e.getLocalizedMessage());
        }
        return null;
    }




    public static JSONObject getDataFromWeb() {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(MAIN_URL)
                    .build();
            response = client.newCall(request).execute();
            return new JSONObject(response.body().string());
        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "" + e.getLocalizedMessage());
        }
        return null;
    }



    public static JSONObject getPasswordAndRateFromWeb() {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(PASSWORD_RATE_URL)
                    .build();
            response = client.newCall(request).execute();
            return new JSONObject(response.body().string());
        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "" + e.getLocalizedMessage());
        }
        return null;

    }



    public static JSONObject readAllRegistration() {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(RGISTRATION_URL_READ)
                    .build();
            response = client.newCall(request).execute();
            return new JSONObject(response.body().string());
        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "" + e.getLocalizedMessage());
        }
        return null;
    }





    public static JSONObject insertData(String id, String name) {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(WAURL+"action=insert&id="+id+"&name="+name)
                    .build();
            response = client.newCall(request).execute();
            //    Log.e(TAG,"response from gs"+response.body().string());
            return new JSONObject(response.body().string());


        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "recieving null " + e.getLocalizedMessage());
        }
        return null;
    }



    public static JSONObject updateData(String id, String name) {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(WAURL+"action=update&id="+id+"&name="+name)
                    .build();
            response = client.newCall(request).execute();
            //    Log.e(TAG,"response from gs"+response.body().string());
            return new JSONObject(response.body().string());


        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "recieving null " + e.getLocalizedMessage());
        }
        return null;
    }


    public static JSONObject updateRateAndPassword(String id, String name) {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(RATEANDPASSWORD_URL+"action=update&id="+id+"&name="+name)
                    .build();
            response = client.newCall(request).execute();
            //    Log.e(TAG,"response from gs"+response.body().string());
            return new JSONObject(response.body().string());


        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "recieving null " + e.getLocalizedMessage());
        }
        return null;
    }

    public static JSONObject readData(String id) {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(WAURL+"action=read&id="+id)
                    .build();
            response = client.newCall(request).execute();
            // Log.e(TAG,"response from gs"+response.body().string());
            return new JSONObject(response.body().string());


        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "recieving null " + e.getLocalizedMessage());
        }
        return null;
    }

    public static JSONObject deleteData(String id) {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(WAURL+"action=delete&id="+id)
                    .build();
            response = client.newCall(request).execute();
            // Log.e(TAG,"response from gs"+response.body().string());
            return new JSONObject(response.body().string());


        } catch (@NonNull IOException | JSONException e) {
            Log.e(TAG, "recieving null " + e.getLocalizedMessage());
        }
        return null;
    }


}

=============================================================

৩। Keys

file > new > java class 

নাম দিন  Keys



package ...............................;


public class Keys {

    public static final String KEY_CONTACTS = "Sheet1";
    public static final String KEY_NAME = "name";
    public static final String KEY_COUNTRY = "rate";
  //  public static final String KEY_IMAGE = "image";

}



=============================================================


৪। MyDataModel

file > new > java class 

নাম দিন  MyDataModel



package ......................................;



public class MyDataModel {

    private String name;

    private String country;



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }



}

=======================================================================

৫।ক।  InsertData

এতক্ষণ আমরা যে ক্লাস গুলো তৈরী করেছি সেগুলো ছিল হেল্পার ক্লাস। সেগুলোর কোন অনক্রিয়েট ছিলনা এবং ছিলনা কোন লেআউট ডিক্লারেশন। 

উপরের ৪টি ক্লাস ব্যবহার করে এখন আমরা দুটি এ্যাক্টিভিটি তৈরী করবো যার  একটির মাধ্যমে আমরা ডাটা আপলোড করব এবং আরেকটির মাধ্যমে আমরা ডাটা ডাউনলোড করব। 


ইনসার্ট ডাটার জন্য একটি জাভা ফাইল এবং একটি  লেআউট এক্সএমএল  লাগবে । নিচের কোডগুলো  দেখুন : 


একটি নতুন একটি এ্রাক্টিভিটি তৈরী করে তার নাম দিন  InsertData . 

এবার নিচের কেডগুলো পেষ্ট করে দিন : 

package  ......................................................;

import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Rect;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;

import org.json.JSONException;
import org.json.JSONObject;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

public class InsertData extends AppCompatActivity {

    private Button insert;

    String id;
    String fullregistration;

    EditText uid1ET, uid2, fullAddress, nameET;

    Context mContext;

    Calendar myCalendar;

    AutoCompleteTextView last_date, district, blodgroup;







    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.insert_data);

        mContext=this;

        Resources DistrictRes = getResources();

        insert = (Button) findViewById(R.id.insert_btn);


        uid1ET = (EditText) findViewById(R.id.uid);
        nameET = (EditText) findViewById(R.id.name);
        district =(AutoCompleteTextView)findViewById(R.id.district);
        fullAddress =(EditText)findViewById(R.id.fullAddress);
        last_date =(AutoCompleteTextView)findViewById(R.id.lastDate);


        //blood group dropdow list :

         blodgroup =(AutoCompleteTextView)findViewById(R.id.blodgroup);
        ////////////////
        //for not blinking the cursor or cursor to left :
        blodgroup.setSelection(blodgroup.getText().length());


        final String[] bloodArray  = DistrictRes.getStringArray(R.array.blood_group);
        ArrayAdapter<String> bloodAdapter =new ArrayAdapter<String>(mContext,android.R.layout.simple_list_item_1,bloodArray);


        blodgroup.setAdapter(bloodAdapter);

        blodgroup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                blodgroup.showDropDown();
            }
        });











        //for not blinking the cursor or cursor to left :
        district.setSelection(district.getText().length());


        final String[] districtname  = DistrictRes.getStringArray(R.array.district_name);
        ArrayAdapter<String> districtAdapter =new ArrayAdapter<String>(mContext,android.R.layout.simple_list_item_1,districtname);

        //show roll quantity built in dropdown :

        district.setAdapter(districtAdapter);
        district.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                district.showDropDown();
            }
        });
        district.setClickable(true);

        //get current date and time from system :
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy");
        final String registration_date = simpleDateFormat.format(new Date());




        //////////////date picker  dialog //////////////

        myCalendar = Calendar.getInstance();

       final DatePickerDialog.OnDateSetListener  date = new DatePickerDialog.OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                                  int dayOfMonth) {
                // TODO Auto-generated method stub
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, monthOfYear);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                updateLabel();
            }

        };

        last_date.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new DatePickerDialog(InsertData.this, date, myCalendar
                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                        myCalendar.get(Calendar.DAY_OF_MONTH)).show();
            }
        });

        Button show_calendar = (Button)findViewById(R.id.show_calendar);
        show_calendar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new DatePickerDialog(InsertData.this, date, myCalendar
                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                        myCalendar.get(Calendar.DAY_OF_MONTH)).show();

            }
        });








        insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


               String phnNo=uid1ET.getText().toString();
               String name =nameET.getText().toString();
               String blodgroupTxt=blodgroup.getText().toString();
              /// String registration_date=*******.getText().toString();
                String districtName = district.getText().toString();
                String fullAddressText = fullAddress.getText().toString();
                String donorLastDate=last_date.getText().toString();

               if(TextUtils.isEmpty(phnNo)){
                   uid1ET.setError("empty");
               }else if(TextUtils.isEmpty(name)){
                   nameET.setError("empty");
               }else if(TextUtils.isEmpty(districtName)){
                   district.setError("empty");
               }else if(TextUtils.isEmpty(fullAddressText)){
                   fullAddress.setError("empty");
               }else if (TextUtils.isEmpty(blodgroupTxt)){
                   blodgroup.setError("empty");
               } else {

                   uid1ET.setError(null);
                   nameET.setError(null);
                   district.setError(null);
                   fullAddress.setError(null);
                   blodgroup.setError(null);


                    id = phnNo;
                    fullregistration =name+"="+blodgroupTxt+"="+phnNo+"="+registration_date+"="+districtName+"="+fullAddressText+"="+":"+donorLastDate;

                    Toast.makeText(mContext,blodgroupTxt,Toast.LENGTH_LONG).show();

                   new InsertDataActivity().execute();


               }








            }
        });


    }




    //for set any date :
    private void updateLabel() {
        String myFormat = "dd.MM.yyyy"; //In which you need put here
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);

        last_date.setText(sdf.format(myCalendar.getTime()));
    }



    class InsertDataActivity extends AsyncTask < Void, Void, Void > {

        ProgressDialog dialog;
        int jIndex;
        int x;

        String result = null;


        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            dialog = new ProgressDialog(InsertData.this);
            dialog.setTitle("Hey Wait Please...");
            dialog.setMessage("Inserting your values..");
            dialog.show();

        }

        @Nullable
        @Override
        protected Void doInBackground(Void...params) {
            JSONObject jsonObject = Controller.insertRegistration(id, fullregistration);// equievalent to id, name .
            Log.i(Controller.TAG, "Json obj ");

            try {
                /**
                 * Check Whether Its NULL???
                 */
                if (jsonObject != null) {

                    result = jsonObject.getString("result");

                }
            } catch (JSONException je) {
                Log.i(Controller.TAG, "" + je.getLocalizedMessage());
            }
            return null;
        }
        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            dialog.dismiss();
            Toast.makeText(mContext, result, Toast.LENGTH_LONG).show();


            uid1ET.setText(null);
            nameET.setText(null);
            district.setText(null);
            fullAddress.setText(null);
            last_date.setText(null);
            blodgroup.setText(null);
            insert.setTextColor(Color.BLUE);

            Snackbar.make(findViewById(R.id.insertdata), result, Snackbar.LENGTH_LONG).show();


        }
    }


    //hide keyboard if touching out side the keyboard :
    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            View v = getCurrentFocus();
            if ( v instanceof EditText) {
                Rect outRect = new Rect();
                v.getGlobalVisibleRect(outRect);
                if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
                    v.clearFocus();
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                }
            }
        }
        return super.dispatchTouchEvent( event );
    }



}

========================================================


৫. খ ।    এবার ইনসার্ট ডাটার  এক্সএমএল লেআউট ফাইল : 



<?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"
    android:id="@+id/insertdata"
    android:orientation="vertical"
    android:layout_gravity="center"
    android:gravity="center_horizontal"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Registration"
        android:textSize="20sp"
        android:textColor="@color/black"
        android:layout_marginTop="20dp"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/name"
        android:hint="নাম"
        android:layout_marginTop="20dp"
        android:singleLine="true"
        />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/uid"
        android:hint="মোবাইল নম্বর"
        android:inputType="numberSigned|numberDecimal"
        android:singleLine="true"
       />

    <AutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/blodgroup"
        android:hint="রক্তের গ্রুপ"
        android:focusableInTouchMode="true"
        android:focusable="false"
        android:clickable="true"/>

    <AutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/district"
        android:hint="জিলা সিলেক্ট করুন"
        android:focusableInTouchMode="true"
        android:focusable="false"
        android:clickable="true"/>



    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/fullAddress"
        android:hint="ঠিকানা"
        android:maxLines="1"

        />


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <AutoCompleteTextView
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:id="@+id/lastDate"
        android:hint="শেষ রক্তদানের তারিখ (যদি থাকে)"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:layout_weight="1"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="calendar"
        android:id="@+id/show_calendar"/>



</LinearLayout>


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Insert"
        android:id="@+id/insert_btn"
        android:layout_marginTop="45dp"
         />


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="*আমি ইনশাআল্লাহ মানবতার সেবায় রক্তদান করতে প্রস্তুত আছি"
        android:textSize="12sp"

        android:layout_marginTop="40dp"/>


</LinearLayout>



==============================================================



৬.   DownloadData : 

এখন ডাউনলোড ডাটার জন্য একটি এ্যাক্টিভিটি লাগবে যেখানে একটি জাভা ক্লাস ফাইল এবং একটি লে আউট এক্স এম এল ফাইল থাকবে, আর এখানে আরেকটি বাড়তি এক্সটার্নাল ক্লাস লাগবে যার নাম হলো এ্যাডাপ্টার । যার কাজ হলো ডাটা ডাউনলোড হওয়ার পর ডাটা গুলোকে একটি লিষ্ট আকারে সাজিয়ে প্রদর্শন করা, যার ম্যাকানিজম হচ্ছে একটি টেক্সটভিউকে বার বার ব্যবহার করে প্রতিটি রো প্রদর্শন করা।

অর্থাৎ, ধরুন আপনার একহাজার রো এর তালিকা আছে, তাহলে কি একহাজার বার আপনি টেক্সটভিউ এর কোড লিখবেন ?  এখানেই এ্যাডাপ্টার এর কাজ। আপনি একটি মাত্র টেক্সটভিউ   এর কোড লিখবেন।  এ্যাডাপ্টারটি আপনার  ডাটা লিষ্ট থেকে একটি করে তথ্য নিয়ে টেক্সটভিউতে প্রদর্শন করবে, এরপরে আবার আরেকটি  তথ্য নিয়ে আবার সেই টেক্সটভিউ কে পুনরায় ব্যবহার করে পরের লাইনে প্রদর্শন করবে। এভাবেই  এ্যাডাপ্টারটি একটি মাত্র টেক্সটভিউকে বার বার ব্যবহার করে একহাজার বা একলক্ষ  রো এর একটি তালিকা প্রদর্শন করবে।  আর এ্যাডাপ্টার এর মধ্যে  যে মেথড এ কাজটা  করে তার না হচ্ছে getView . 


তাহলে   এই এ্যাক্টিভিটির জন্য এই মুহুর্তে যে কয়টি ফাইল তৈরী করতে হবে তাহলো : 

ক।  ডাউনলোড ডাটা জাভা 
খ। ডাউনলোড ডাটা এক্স এম এল লেআউট 
গ। এ্যাডাপ্টার ক্লাস 
ঘ। এ্যাডাপ্টার ক্লাস বার বার ব্যবহার করবে এরকম একটি টেক্সটভিউ সহকারে একটি লেআউট । 

এছাড়াও উপরে বর্ণি ত  কীওয়ার্ড, কন্ট্রোলার,  ইন্টারনেট কানেকশন এবং ডাটামডেল ক্লাসও এই এ্যাক্টিভিটিতে ব্যবহৃত হবে। 




৬.ক।  ডাউনলোড ডাটা জাভা 


package .................................................;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;




public class Show_All_Registration extends AppCompatActivity {

    private ListView list_all_order;
    private ArrayList<MyDataModel> list;
    private ArrayAdapter_showAll_Registration adapter;
    TextView firstTv;







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

        setTitle("Show Donor");



        list = new ArrayList<>();

        String searchString1 = getIntent().getStringExtra("District");

       // String searchString1="";
        String searchString2=getIntent().getStringExtra("BloodGroup");;

        adapter = new ArrayAdapter_showAll_Registration(this, list, searchString1, searchString2);




        list_all_order = (ListView) findViewById(R.id.list_all_order);


        list_all_order.setDividerHeight(0);
       // list_all_order.smoothScrollToPosition(adapter.getCount()-1);

        list_all_order.setAdapter(adapter);








        ///this list_all_order.setOnItemClickListener does not work for cardview, so see in adapter for cardview clicklistener:

      /*
        list_all_order.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Snackbar.make(findViewById(R.id.show_all_layout), list.get(position).getName() + " => " + list.get(position).getCountry(), Snackbar.LENGTH_LONG).show();
                String name = list.get(position).getName()+"+++++++++++++++++" +  list.get(position).getCountry();
                dbcon.insertData(name);
                Intent main = new Intent(Show_All_Registration_classic.this, Internal_PhnMemry_SavedList.class)
                        .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(main);

            }
        });
        */

        /**
         * Just to know onClick and Printing Hello Toast in Center.
         */
        // Toast toast = Toast.makeText(getApplicationContext(), "Click on FloatingActionButton to Load JSON", Toast.LENGTH_LONG);
        // toast.setGravity(Gravity.CENTER, 0, 0);
        // toast.show();




        if (InternetConnection.checkConnection(getApplicationContext())) {
            new GetDataTask().execute();
            // String  s = list.get(0).getName();


        } else {
            Toast.makeText(getApplicationContext(), "Internet Connection Not Available", Toast.LENGTH_LONG).show();
        }


        FloatingActionButton fab1 = (FloatingActionButton) findViewById(R.id.fab1);
        fab1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(@NonNull View view) {

                /**
                 * Checking Internet Connection
                 */
                if (InternetConnection.checkConnection(getApplicationContext())) {
                  //  new GetDataTask().execute();
                    recreate();

                    Toast.makeText(getApplicationContext(),"Re_Download........",Toast.LENGTH_LONG).show();
                } else {
                    Snackbar.make(view, "Internet Connection Not Available", Snackbar.LENGTH_LONG).show();
                }
            }
        });
    }

    /**
     * Creating Get Data Task for Getting Data From Web
     */
    class GetDataTask extends AsyncTask<Void, Void, Void> {

        ProgressDialog dialog;
        int jIndex;
        int x;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            /**
             * Progress Dialog for User Interaction
             */
            for(int i=0; i<1; i++){ //this make the duration of toast 1x, if you write i<2 so this make the duration 2x
                Toast toast =  Toast.makeText(getApplicationContext(),"Loading ........",Toast.LENGTH_LONG);
                // toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL,7,0);
               // toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();

            }


            x=list.size();

            if(x==0)
                jIndex=0;
            else
                jIndex=x;

            dialog = new ProgressDialog(Show_All_Registration.this);
            dialog.setTitle("Hey Wait Please...");
           // dialog.setTitle("Hey Wait Please..."+x);


            dialog.setMessage("Downloading Registrations...");
            dialog.show();
        }

        @Nullable
        @Override
        protected Void doInBackground(Void... params) {

            /**
             * Getting JSON Object from Web Using okHttp
             */
            JSONObject jsonObject = Controller.readAllData();

            try {
                /**
                 * Check Whether Its NULL???
                 */
                if (jsonObject != null) {
                    /**
                     * Check Length...
                     */
                    if(jsonObject.length() > 0) {
                        /**
                         * Getting Array named "contacts" From MAIN Json Object
                         */
                        JSONArray array = jsonObject.getJSONArray(Keys.KEY_CONTACTS);

                        /**
                         * Check Length of Array...
                         */


                        int lenArray = array.length();
                        if(lenArray > 0) {
                            for( ; jIndex < lenArray; jIndex++) {

                                /**
                                 * Creating Every time New Object
                                 * and
                                 * Adding into List
                                 */
                                MyDataModel model = new MyDataModel();

                                /**
                                 * Getting Inner Object from contacts array...
                                 * and
                                 * From that We will get Name of that Contact
                                 *
                                 */
                                JSONObject innerObject = array.getJSONObject(jIndex);
                                String name = innerObject.getString(Keys.KEY_NAME);
                                String country = innerObject.getString(Keys.KEY_COUNTRY);
//                                String image = innerObject.getString(Keys.KEY_IMAGE);
                                /**
                                 * Getting Object from Object "phone"
                                 */
                                //JSONObject phoneObject = innerObject.getJSONObject(Keys.KEY_PHONE);
                                //String phone = phoneObject.getString(Keys.KEY_MOBILE);

                                model.setName(name);
                                model.setCountry(country);
                                //                              model.setImage(image);

                                /**
                                 * Adding name and phone concatenation in List...
                                 */
                                list.add(model);
                            }
                        }
                    }
                } else {

                }
            } catch (JSONException je) {
              //  Log.i(JSONParserAll.TAG, "" + je.getLocalizedMessage());
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            dialog.dismiss();

            /**
             * Checking if List size if more than zero then
             * Update ListView
             */
            if(list.size() > 0) {


                adapter.notifyDataSetChanged();


             //get extras from Update_Remarks_Classic.class: the extra is id
                Intent i = getIntent();

                if(i.hasExtra("listViewPosition")){ //if extra is not null :
                    final   String modifiedIDposition=i.getStringExtra("listViewPosition");
                  final  int positionOfListview =Integer.parseInt(modifiedIDposition);

                    list_all_order.smoothScrollToPosition(positionOfListview-1);
                    Toast.makeText(getApplicationContext(),modifiedIDposition,Toast.LENGTH_LONG).show();


                  }else{
                    // Do something else : (Direct opening this class, list view setview to the last row:)
                    list_all_order.smoothScrollToPosition(adapter.getCount()-1);
                }


            } else {
                Snackbar.make(findViewById(R.id.show_all_layout), "No Data Found", Snackbar.LENGTH_LONG).show();
            }
        }
    }
}




==============================================================






৬। খ। ডাউনলোড ডাটা এক্স এম এল লেআউট :


<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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="horizontal"
    tools:context="bangladesh.donation.blood.Show_All_Registration"
    android:id="@+id/show_all_layout"
    >


    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/list_all_order">

    </ListView>


    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left|top"

        android:src="@android:drawable/stat_sys_download" />

</android.support.design.widget.CoordinatorLayout>




==============================================================


৬. গ। এ্যাডাপ্টার ক্লাস

package .....................;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Paint;
import android.net.Uri;
import android.support.v7.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;


/**
 * Created by user on 4/1/2018.
 */

public class ArrayAdapter_showAll_Registration extends ArrayAdapter<MyDataModel> {

   // SharedPreferences settings = getSharedPreferences("prefs", 0);


    SharedPreferences settings ;
    SharedPreferences.Editor editor ;


    List<MyDataModel> modelList;
    Context context;
    private LayoutInflater mInflater;
    List<String> listofItems;

    String searchkey1;
    String searchkey2;

    // Constructors
    public ArrayAdapter_showAll_Registration(Context context, List<MyDataModel> objects, String searchString1, String searchString2) {
        super(context, 0, objects);
        this.context = context;
        this.mInflater = LayoutInflater.from(context);
        modelList = objects;
        this.searchkey1=searchString1;
        this.searchkey2=searchString2;
    }

    @Override
    public MyDataModel getItem(int position) {
        return modelList.get(position);


    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {







        final ViewHolder vh;
        if (convertView == null) {
            View view = mInflater.inflate(R.layout.show_all_listitem_registration, parent, false);
            vh = ViewHolder.create((RelativeLayout) view);
            view.setTag(vh);
        } else {
            vh = (ViewHolder) convertView.getTag();
        }


        MyDataModel item = getItem(position);

      // vh.textViewName.setText(item.getName());
       //vh.textViewCountry.setText(item.getCountry());


        settings =context.getSharedPreferences("prefs", 0);
      //  editor = settings.edit();
        String courier2 = settings.getString("COURIER", "");
        String   customer_gmail=settings.getString("CUSTOMER_GMAIL","");






       final String id =item.getName();//this is the order id
       final String s =item.getCountry(); // this is the rest order



        if(s.contains(searchkey1)&& s.contains(searchkey2)) {

            vh.cardview.setVisibility(View.VISIBLE);


            //first this textview contains id
            vh.textViewName.setText(id); //this is the gmail as Customers registration ID
            //set phone link for mobile numbers :
            setAutolinkForPhoneWorkAround(vh.textViewName, id);


            //this is the second array line from net spreadsheet, this contains full order :
            String[] order = s.split("\\s*\\=\\s*");


            final String name = order[0];
            final String bloodgroup = order[1];
            final String phnNo = order[2];
            final String regDate = order[3];

            final String districtName = order[4];
            final String fullAddress = order[5];
            final String donorLastDate = order[6];


            //   final String date=order[7];//

            //textViewHouse//নাম
            //textViewDistrict//জিলা
            //textViewCourier//রক্তের গ্রুপ
            //crMobile//রেজি: তারিখ
            //srGmail//মোাবাইল নং
            //srMobile//শেষ রক্তদানের তারিখ
            //remark//পূর্ণঠিকানা

            vh.house.setText(name);
            vh.district.setText(districtName);

            vh.courier.setText(bloodgroup);
            vh.crMobile.setText(regDate);
            vh.srGmail.setText(phnNo);
            //   vh.date.setText(date);
            vh.srMobile.setText(donorLastDate);
            vh.remark.setText(fullAddress);

            //for printing the position of Listview :
            int pos = position + 1;
            vh.rowNumber.setText("" + pos);//the method of set an integer to setText method in a TextView


            //set phone link for mobile numbers :
            setAutolinkForPhoneWorkAround(vh.srGmail, phnNo);

        }else {
            vh.cardview.setVisibility(View.GONE);
        }





        ///for Search_Registration_classic , go through the main class  Search_Registration_classic and to uses adapter as a searchString:

        /*
        vh.district.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Searching...", Toast.LENGTH_LONG).show();

                 Intent modify_intent = new Intent(context,Search_Registration_classic.class);
                modify_intent.putExtra("SearchInRegistration",district );

                context.startActivity(modify_intent);
                    }
                    });


        vh.courier.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Searching...", Toast.LENGTH_LONG).show();

                Intent modify_intent = new Intent(context,Search_Registration_classic.class);
                modify_intent.putExtra("SearchInRegistration",courier );

                context.startActivity(modify_intent);



            }
        });

        vh.house.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Searching...", Toast.LENGTH_LONG).show();

                Intent modify_intent = new Intent(context,Search_Registration_classic.class);
                modify_intent.putExtra("SearchInRegistration",house );

                context.startActivity(modify_intent);



            }
        });

        vh.srGmail.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Searching...", Toast.LENGTH_LONG).show();

                Intent modify_intent = new Intent(context,Search_Registration_classic.class);
                modify_intent.putExtra("SearchInRegistration",srGmail );

                context.startActivity(modify_intent);



            }
        });

        vh.date.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Searching...", Toast.LENGTH_LONG).show();

                Intent modify_intent = new Intent(context,Search_Registration_classic.class);
                modify_intent.putExtra("SearchInRegistration",date );

                context.startActivity(modify_intent);



            }
        });

        vh.crMobile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Searching...", Toast.LENGTH_LONG).show();

                Intent modify_intent = new Intent(context,Search_Registration_classic.class);
                modify_intent.putExtra("SearchInRegistration",crMobile );

                context.startActivity(modify_intent);



            }
        });


        vh.rowNumber.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "this is Temporary ID...", Toast.LENGTH_LONG).show();





            }
        });


        ///search order by customer ID :


        vh.textViewName.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Searching...", Toast.LENGTH_LONG).show();

                Intent modify_intent = new Intent(context,Search_Orders_classic.class);
                modify_intent.putExtra("SearchInOrders",id );

                context.startActivity(modify_intent);



            }
        });

        */









        return vh.rootView;
    }



    private static class ViewHolder {
        public final RelativeLayout rootView;

        public final TextView textViewName;
        public final TextView textViewCountry;
        public final CardView cardview;
        public final TextView date;
        public final TextView time;
        public final TextView house;
        public final TextView district;
        public final TextView courier;
        public final TextView catagory;

        public final TextView width;
        public final TextView  roll;
        public final TextView  total;
        public final TextView  crGmail;
        public final TextView  srGmail;
        public final TextView  crMobile;
        public final TextView srMobile;
        public final TextView remark;
        public final TextView rowNumber;



        private ViewHolder(RelativeLayout rootView, TextView textViewName, TextView textViewCountry, CardView cardview, TextView date, TextView time, TextView house, TextView district, TextView courier, TextView catagory,

                           TextView  width, TextView roll, TextView total, TextView crGmail, TextView srGmail, TextView crMobile, TextView srMobile, TextView remark, TextView rowNumber) {
            this.rootView = rootView;
            this.textViewName = textViewName;

            this.textViewCountry = textViewCountry;
            this.cardview=cardview;
            this.date = date;
            this.time = time;
            this.house = house;
            this.district = district;
            this.courier =courier;
            this.catagory =catagory;

            this.width=width;
            this.roll=roll;
            this.total=total;
            this.crGmail=crGmail;
            this.srGmail=srGmail;
            this.crMobile=crMobile;
            this.srMobile=srMobile;
            this.remark=remark;
            this.rowNumber=rowNumber;



        }

        public static ViewHolder create(RelativeLayout rootView) {
            TextView textViewName = (TextView) rootView.findViewById(R.id.textViewName);
            TextView textViewCountry = (TextView) rootView.findViewById(R.id.textViewCountry);
            CardView cardview=(CardView)rootView.findViewById(R.id.card_view1);

            TextView date = (TextView) rootView.findViewById(R.id.textViewDate);
           TextView time = (TextView) rootView.findViewById(R.id.textViewTime);
            TextView house = (TextView) rootView.findViewById(R.id.textViewHouse);
          TextView district = (TextView) rootView.findViewById(R.id.textViewDistrict);
           TextView courier = (TextView) rootView.findViewById(R.id.textViewCourier);
          TextView catagory = (TextView) rootView.findViewById(R.id.textViewCatagory);


            TextView width=(TextView)rootView.findViewById(R.id.width);
            TextView roll=(TextView)rootView.findViewById(R.id.roll);
            TextView total=(TextView)rootView.findViewById(R.id.total);
            TextView crGmail=(TextView)rootView.findViewById(R.id.crGmail);
            TextView srGmail=(TextView)rootView.findViewById(R.id.srGmail);
            TextView crMobile=(TextView)rootView.findViewById(R.id.crMobile);
            TextView srMobile=(TextView)rootView.findViewById(R.id.srMobile);
            TextView remark=(TextView)rootView.findViewById(R.id.remark);

            TextView rowNumber=(TextView)rootView.findViewById(R.id.rowNumber);


            return new ViewHolder(rootView, textViewName, textViewCountry, cardview, date, time, house,district,courier,catagory,
                    width, roll, total, crGmail, srGmail, crMobile,srMobile,remark, rowNumber);
        }
    }

    private void setAutolinkForPhoneWorkAround(TextView textView, final String phoneText){
        textView.setText(phoneText);
        textView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i =new Intent(Intent.ACTION_VIEW, Uri.parse("tel:"+phoneText));

                context.startActivity(i);
            }
        });
    }
}


==============================================================

ঘ। এ্যাডাপ্টার ক্লাস বার বার ব্যবহার করবে এরকম একটি টেক্সটভিউ সহকারে একটি লেআউট ।

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">

    <android.support.v7.widget.CardView
        android:id="@+id/card_view1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"

        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="5dp"
        card_view:cardBackgroundColor="@color/QuranKuran"
        card_view:cardCornerRadius="5dp"
        card_view:contentPadding="5dp"
        card_view:contentPaddingTop="5dp"
        card_view:cardElevation="20dp"
        android:visibility="gone"
        >
        <LinearLayout

            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">


            <View
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_weight="1"/>



            <TextView
                android:textAppearance="?android:textAppearanceSmall"


                android:layout_width="wrap_content"
                android:layout_height="wrap_content"

                android:text="TID:"/>



            <TextView
                android:textAppearance="?android:textAppearanceSmall"

                android:id="@+id/rowNumber"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="1030"/>


        </LinearLayout>



    <LinearLayout

    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_centerVertical="true"
    android:layout_height="wrap_content"
    >

    <LinearLayout
        android:layout_marginTop="12dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:gravity="center_horizontal"
        >

        <TextView

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:textAppearance="?android:textAppearanceSmall"

            android:text="ID:"
            android:textStyle="bold|italic"
            android:textColor="@color/black"


            />


    <TextView
        android:id="@+id/textViewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textAppearance="?android:textAppearanceSmall"
        tools:text="TextView"
        android:text="OrderID"
        android:textStyle="bold|italic"
        android:textColor="@color/black"


       />


    </LinearLayout>

    <TextView
        android:id="@+id/textViewCountry"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textAppearance="?android:textAppearanceMedium"
        tools:text="TextView"
        android:autoLink="all"
        android:visibility="gone"

        />


        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="Date:"
                    android:textColor="@color/black"
                    android:textStyle="italic"
                    android:visibility="gone"
                    />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="নাম:"
                    android:textColor="@color/black"
                    android:textStyle="italic"/>


                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="FullAddress:"
                    android:textColor="@color/black"
                    android:textStyle="italic"
                    android:visibility="gone"
                    />


                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="জিলা:"
                    android:textColor="@color/black"
                    android:textStyle="italic"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="রক্তের গ্রুপ : "
                    android:textColor="@color/black"
                    android:textStyle="italic"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="Catagory:"
                    android:textColor="@color/black"
                    android:textStyle="italic"
                    android:visibility="gone"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="Width:"
                    android:textColor="@color/black"
                    android:textStyle="italic"
                    android:visibility="gone"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/black"
                    android:textStyle="italic"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="roll"
                    android:visibility="gone"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="total"
                    android:textColor="@color/black"
                    android:textStyle="italic"
                    android:visibility="gone"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"

                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="তালিকাভুক্তির তারিখ:"
                    android:textColor="@color/black"
                    android:textStyle="italic"                    />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="মোবাইল নং :"
                    android:textColor="@color/black"
                    android:textStyle="italic"

                    />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"

                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="CustomerMobile"
                    android:textColor="@color/black"
                    android:textStyle="italic"
                    android:visibility="gone"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"

                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="শেষ রক্তদানের তরিখ:"
                    android:textColor="@color/black"
                    android:textStyle="italic"                    />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="পূর্ণ ঠিকানা:"
                    android:textColor="@color/black"
                    android:textStyle="italic"
                    />





            </LinearLayout>

  <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_marginLeft="30dp">


                <TextView
                    android:id="@+id/textViewDate"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:textColor="@color/colorPrimary"
                    tools:text="date"
                    android:visibility="gone"

                    />

                <TextView
                    android:id="@+id/textViewHouse"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"

                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="নাম"

                    android:textColor="@color/colorBlue"
                    />
      <TextView
          android:id="@+id/textViewTime"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textAppearance="?android:textAppearanceSmall"
            android:text="FulssAddress"
          android:textColor="@color/colorPrimary"
          android:visibility="gone"
          />

                <TextView
                    android:id="@+id/textViewDistrict"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="italic|bold"
                    android:textColor="@color/colorBlue"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:text="জিলা:"

                    />
                <TextView
                    android:id="@+id/textViewCourier"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:textAppearanceSmall"
                    tools:text="রক্তের গ্রুপ"
                    android:textStyle="italic|bold"
                    android:textColor="@color/colorBlue"
                    />
                <TextView
                    android:id="@+id/textViewCatagory"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/colorPrimary"
                    android:textAppearance="?android:textAppearanceSmall"
                    tools:text="catagory"
                    android:visibility="gone"
                    />

                <TextView
                    android:id="@+id/width"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/colorPrimary"
                    android:textAppearance="?android:textAppearanceSmall"
                    tools:text="width"
                    android:visibility="gone"
                    />

        <TextView
            android:id="@+id/roll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorPrimaryDark"
            android:textAppearance="?android:textAppearanceSmall"
            android:text="roll"
            android:textStyle="bold"
            android:visibility="gone"
            />

        <TextView
            android:id="@+id/total"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
           android:textAppearance="?android:textAppearanceSmall"
            android:text="total"
            android:textColor="@color/colorPrimaryDark"
            android:textStyle="bold"
            android:visibility="gone"
            />
        <TextView
            android:id="@+id/crMobile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:textAppearance="?android:textAppearanceSmall"
            android:text="রেজি:তারিখ"

            android:textColor="@color/colorBlue"
            />

        <TextView
            android:id="@+id/srGmail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:textAppearanceSmall"
            android:text="মোবাইল নং"
            android:textColor="@color/colorAccent"
            android:autoLink="all"
            />

        <TextView
            android:id="@+id/crGmail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:textAppearance="?android:textAppearanceSmall"
            android:text="textViewCrgmail"
            android:autoLink="email"
            android:textColor="@color/colorAccent"
            android:visibility="gone"
            />
        <TextView
            android:id="@+id/srMobile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:textAppearance="?android:textAppearanceSmall"
            android:text="শেষ রক্তদানের তারিখ"

            android:textColor="@color/black"
            />
        <TextView
            android:id="@+id/remark"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:textAppearanceSmall"
            android:text="পূর্ণঠিকানা"


            android:textColor="@color/colorBlue"

            />

            </LinearLayout>







        </LinearLayout>




</LinearLayout>

    </android.support.v7.widget.CardView>
</RelativeLayout>



============================================
============================================

২। ওয়েব পার্ট  : 



জিমেইল আইডি দিয়ে গুগল  spreadsheet ওপেন করুন।   একটি ব্লাংক spreadsheet ওপেন করে যে কোন নাম দিন। এবার দুটি কলাম এর নাম দিন name এবং rate . 

এবার   এই spreadsheet এর উপরের দিক থেকে এ্যাড্রেস কপি করে আমাদের এই লেসনের উপরের দিকে যেখানে কন্ট্রোলার এর আলোচনা করা হয়েছে অর্থাৎ কন্ট্রোলার ক্লাস এর WA_URL  হিসেবে   যে   ইউআরএলটি রয়েছে সেটির অভ্যন্তরে ইউআরএল আইডি আছে, সেটি  মুছে দিয়ে  আপনার  spreadsheet  এর  ইউআর এল   থেকে আইডি কপি করে সেখানে পেষ্ট করে দিন। 

ধরি,  spreadsheet  এর  এ্যাড্রেস বারে  নিচের  এ্যাড্রেস লেখা আছে : 

https://docs.google.com/spreadsheets/d/1iBXaq-TQ-V9G40yYUpBdGueL00HCAA_6o88weTo9hlc/edit#gid=0


তাহলে এখানে আইডি হবে এটা : 1iBXaq-TQ-V9G40yYUpBdGueL00HCAA_6o88weTo9hlc




এরপর spreadsheet এর  মেনু থেকে tools > script editor  ওপেন করে যা লেখা থাকবে তা মুছে ফেলে  নিচের কোডটুকু কপি পেষ্ট করে দিন : 



function doGet(e) {

    var op = e.parameter.action;

    var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1jJm4G3o78I7E3wq7HrYUCsG5axDmVVu2TReoZibrsEM/edit#gid=0");
    var sheet = ss.getSheetByName("Sheet1");



    if (op == "insert")
        return insert_value(e, sheet);

    //Make sure you are sending proper parameters
    if (op == "read")
        return read_value(e, sheet);

    if (op == "update")
        return update_value(e, sheet);

    if (op == "delete")
        return delete_value(e, sheet);

    if (op == "readAll")
        return read_all(e, ss);

}




function read_all(request,ss){


  var output  = ContentService.createTextOutput(),
      data    = {};


   var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1VZh9F7HzJE21YiOtDSW6SDwSBA3XK3_DZtj519UWj80/edit#gid=0");
    var sheet = ss.getSheetByName("Sheet1");





  //Note : here sheet is sheet name , don't get confuse with other operation
   //   var sheet="sheet1";

  data.records = readData_(ss, sheet);

  var callback = request.parameters.callback;

  if (callback === undefined) {
    output.setContent(JSON.stringify(data));
  } else {
    output.setContent(callback + "(" + JSON.stringify(data) + ")");
  }
  output.setMimeType(ContentService.MimeType.JAVASCRIPT);

  return output;
}


function readData_(ss, sheetname, properties) {

  if (typeof properties == "undefined") {
    properties = getHeaderRow_(ss, sheetname);
    properties = properties.map(function(p) { return p.replace(/\s+/g, '_'); });
  }

  var rows = getDataRows_(ss, sheetname),
      data = [];

  for (var r = 0, l = rows.length; r < l; r++) {
    var row     = rows[r],
        record  = {};

    for (var p in properties) {
      record[properties[p]] = row[p];
    }

    data.push(record);

  }
  return data;
}



function getDataRows_(ss, sheetname) {
  var sh = ss.getSheetByName(sheetname);

  return sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).getValues();
}


function getHeaderRow_(ss, sheetname) {
  var sh = ss.getSheetByName(sheetname);

  return sh.getRange(1, 1, 1, sh.getLastColumn()).getValues()[0];
}


//Recieve parameter and pass it to function to handle


function insert_value(request, sheet) {


    var id = request.parameter.id;
    var name = request.parameter.name;
    var country = request.parameter.country;


  var currRow = SpreadsheetApp.getActiveSheet().getActiveCell().getRow();

  var text = "noor";


  //for auto increment number :


   var AUTOINC_COLUMN = 0;
  var HEADER_ROW_COUNT = 1;

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var worksheet   = spreadsheet.getSheetByName("Sheet1");
  var rows        = worksheet.getDataRange().getNumRows();
  var vals        = worksheet.getSheetValues(1, 1, rows+1, 2);


  /////


  ///check if id already exist :

    var flag = 1;
    var lr = sheet.getLastRow();
    for (var i = 1; i <= lr; i++) {
        var id1 = sheet.getRange(i, 2).getValue();
        if (id1 == id) {
            flag = 0;
            var result = "Id - exist..";
        }
    }



  /////get the id not from the user but from the auto increment system described upper : here id means row number :
  //// otherwise if you want to get id from the user , so delete this line :
  //this registration script get id from customer ad their email id entered into app, so
  // this line is disabled: 

  //id = rows;

  /////




  //add new row with recieved parameter from client
    if (flag == 1) {


      //get a time stamp
      //change time stamp from a1:c1 to auto increment id for myfunction execute:
      //  var d = new Date();
      //  var currentTime = d.toLocaleString();
        var rowData = sheet.appendRow([ rows,id, name]);
        var result = "Web Registration Complete";
      
      
      
        //send Email: 
      var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 2;   // Number of rows to process
  // Fetch the range of cells A2:B3
   var dataRange = sheet.getRange(startRow, 1, numRows, 7)
   // var dataRange = spreadSheet.getDataRange();
  
  
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var emailAddress = row[6];  // First column
    var message = "RegistrationID="+rows+"=Customer Email:="+id+"="+name;       // Second column
    var subject = " A New Registration From ক্লাসিক সাইন এ্যাপ  ";
    MailApp.sendEmail(emailAddress, subject, message);
        
  }
      
      
      
      
    }
    result = JSON.stringify({

        "result": result

    });

    return ContentService
        .createTextOutput(result)
        .setMimeType(ContentService.MimeType.JAVASCRIPT);
}




//update function

function update_value(request, sheet) {

    var output = ContentService.createTextOutput();
    var id = request.parameter.id;
    var flag = 0;
    var country = request.parameter.name;
    var lr = sheet.getLastRow();
    for (var i = 1; i <= lr; i++) {
        var rid = sheet.getRange(i, 2).getValue();
        if (rid == id) {
            sheet.getRange(i, 3).setValue(country);
            var result = "value updated successfully";
            flag = 1;
        }
    }
    if (flag == 0)
        var result = "id not found";

    result = JSON.stringify({
        "result": result
    });

    return ContentService
        .createTextOutput(result)
        .setMimeType(ContentService.MimeType.JAVASCRIPT);


}




function delete_value(request, sheet) {

    var output = ContentService.createTextOutput();
    var id = request.parameter.id;
    var country = request.parameter.name;
    var flag = 0;



    var lr = sheet.getLastRow();
    for (var i = 1; i <= lr; i++) {
        var rid = sheet.getRange(i, 2).getValue();
        if (rid == id) {
            sheet.deleteRow(i);
            var result = "value deleted successfully";
            flag = 1;
        }

    }

    if (flag == 0)
        var result = "id not found";



    result = JSON.stringify({
        "result": result
    });

    return ContentService
        .createTextOutput(result)
        .setMimeType(ContentService.MimeType.JAVASCRIPT);

}


function read_value(request, sheet) {

    var id = request.parameter.id;
    var name;
    var record = {};
    //var place = request.parameter.place;

    var flag = 1;
    var lr = sheet.getLastRow();
    for (var i = 1; i <= lr; i++) {
        var id1 = sheet.getRange(i, 2).getValue();
        if (id1 == id) {
            flag = 0;

            name = sheet.getRange(i, 3).getValue();



            var result = JSON.stringify({
                "user": {
                    "id": id,
                    "name": name
                }

            });


        }

    }
    return ContentService
        .createTextOutput(result)
        .setMimeType(ContentService.MimeType.JAVASCRIPT);


}




এবার সেভ করে পাবলিশড করে দিন। পাবলিশড করার সময় আমার   জিমেইল এ্যাকাউন্টের অনুমতি চাইবে ওকে দিয়ে কন্টিনিউ করুন। এরপর এ্যাডভান্স এ ক্লিক করে পাবলিশড করুন। 



=========================================

=========================================


=========================================


নোট :  ১ ।  
AndroidManifast ফাইলে এ্যাপ্লিকেশন ট্যাগ এর বাইরে  নিচের তিনটি পারমিশন লিখতে হবে : 

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



===================================

নোট : ২।    build Gradle ফাইলে নিচের Dependency  এর অভ্যন্তরে নিচের  dependency  গুলো যুক্ত করতে হবে : 

 compile 'com.android.support:design:28.0.0-beta01'
    compile 'com.squareup.okhttp:okhttp:2.7.5'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.7.5'
    compile 'com.android.support:cardview-v7:28.0.0-beta01'

====================================

নোট : ৩ ।  

ক) spreadsheet লিখে গুগলে সার্চ দিলেই পাওয়া যাবে।  
খ)  নতুন spreadsheet নিয়ে যে কোন নাম দিয়ে সেভ দেওয়ার পর  file > share > advance   এ যাওয়ার পর who has access অপশনে চেঞ্জ সিলেক্ট করতে হবে এরপর সেখান থেকে On anyone with the link সিলেক্ট করে সেভ করতে হবে। 


==================================


------ 
Mohammad Noor Hossain.
facebook.com/noor.hossain.16