Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Javas ex sdkNew to Visual Studio Code? Get it now.
Javas ex sdk

Javas ex sdk

DEVSO

|
10 installs
| (0) | Free
Brief description here
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

📘 PRACTICAL 1 — SIMPLE CALCULATOR


UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/result_tv"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:text="0"
            android:textSize="26sp"
            android:gravity="end|center_vertical"
            android:padding="8dp"/>

        <TextView
            android:id="@+id/expression_tv"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:textSize="18sp"
            android:gravity="end|center_vertical"
            android:padding="8dp"
            android:layout_marginBottom="12dp"/>

        <GridLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:columnCount="4"
            android:rowCount="6"
            android:useDefaultMargins="true">

            <Button android:id="@+id/btn_ac" android:text="AC"/>
            <Button android:id="@+id/btn_openbracket" android:text="("/>
            <Button android:id="@+id/btn_closebracket" android:text=")"/>
            <Button android:id="@+id/btn_C" android:text="C"/>

            <Button android:id="@+id/btn_7" android:text="7"/>
            <Button android:id="@+id/btn_8" android:text="8"/>
            <Button android:id="@+id/btn_9" android:text="9"/>
            <Button android:id="@+id/btn_divide" android:text="/"/>

            <Button android:id="@+id/btn_4" android:text="4"/>
            <Button android:id="@+id/btn_5" android:text="5"/>
            <Button android:id="@+id/btn_6" android:text="6"/>
            <Button android:id="@+id/btn_multiply" android:text="*"/>

            <Button android:id="@+id/btn_1" android:text="1"/>
            <Button android:id="@+id/btn_2" android:text="2"/>
            <Button android:id="@+id/btn_3" android:text="3"/>
            <Button android:id="@+id/btn_minus" android:text="-"/>

            <Button android:id="@+id/btn_0" android:text="0"/>
            <Button android:id="@+id/btn_decimal" android:text="."/>
            <Button android:id="@+id/btn_equals" android:text="="/>
            <Button android:id="@+id/btn_add" android:text="+"/>

        </GridLayout>
    </LinearLayout>
</ScrollView>


JAVA — MainActivity.java

(Your same logic, cleaned & made human-like)

package com.example.practical1mc;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import com.google.android.material.button.MaterialButton;

import java.util.Stack;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    TextView expression_tv, result_tv;

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

        expression_tv = findViewById(R.id.expression_tv);
        result_tv = findViewById(R.id.result_tv);

        int[] ids = {
                R.id.btn_0, R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_4,
                R.id.btn_5, R.id.btn_6, R.id.btn_7, R.id.btn_8, R.id.btn_9,
                R.id.btn_add, R.id.btn_minus, R.id.btn_multiply, R.id.btn_divide,
                R.id.btn_decimal, R.id.btn_equals,
                R.id.btn_ac, R.id.btn_C, R.id.btn_openbracket, R.id.btn_closebracket
        };

        for (int id : ids) findViewById(id).setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        MaterialButton b = (MaterialButton) view;
        String text = b.getText().toString();
        String exp = expression_tv.getText().toString();

        switch (text) {
            case "AC":
                expression_tv.setText("");
                result_tv.setText("0");
                return;

            case "C":
                if (!exp.isEmpty()) exp = exp.substring(0, exp.length() - 1);
                break;

            case "=":
                result_tv.setText(evaluateExpression(exp));
                return;

            default:
                exp += text;
        }

        expression_tv.setText(exp);

        String output = evaluateExpression(exp);
        if (!output.equals("Error")) result_tv.setText(output);
    }

    private String evaluateExpression(String exp) {
        try {
            return String.valueOf(evaluate(exp));
        } catch (Exception e) {
            return "Error";
        }
    }

    private double evaluate(String expression) {
        Stack<Double> numbers = new Stack<>();
        Stack<Character> ops = new Stack<>();

        for (int i = 0; i < expression.length(); i++) {

            char c = expression.charAt(i);

            if (Character.isDigit(c) || c == '.') {
                StringBuilder num = new StringBuilder();
                while (i < expression.length() &&
                        (Character.isDigit(expression.charAt(i)) || expression.charAt(i) == '.')) {
                    num.append(expression.charAt(i++));
                }
                i--;
                numbers.push(Double.parseDouble(num.toString()));
            }

            else if (c == '(')
                ops.push(c);

            else if (c == ')') {
                while (ops.peek() != '(')
                    numbers.push(apply(ops.pop(), numbers.pop(), numbers.pop()));
                ops.pop();
            }

            else if (isOperator(c)) {
                while (!ops.isEmpty() && precedence(ops.peek()) >= precedence(c)) {
                    numbers.push(apply(ops.pop(), numbers.pop(), numbers.pop()));
                }
                ops.push(c);
            }
        }

        while (!ops.isEmpty()) {
            numbers.push(apply(ops.pop(), numbers.pop(), numbers.pop()));
        }

        return numbers.pop();
    }

    private boolean isOperator(char c) {
        return c == '+' || c == '-' || c == '*' || c == '/';
    }

    private int precedence(char op) {
        if (op == '+' || op == '-') return 1;
        if (op == '*' || op == '/') return 2;
        return 0;
    }

    private double apply(char op, double b, double a) {
        switch (op) {
            case '+': return a + b;
            case '-': return a - b;
            case '*': return a * b;
            case '/': 
                if (b == 0) return 0;
                return a / b;
        }
        return 0;
    }
}


✅ PRACTICAL 2 — Currency Converter


UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <Spinner
        android:id="@+id/fromCurrency"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Spinner
        android:id="@+id/toCurrency"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp" />

    <EditText
        android:id="@+id/amountInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter Amount"
        android:inputType="numberDecimal"
        android:layout_marginTop="12dp" />

    <Button
        android:id="@+id/convertBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Convert"
        android:layout_marginTop="12dp" />

    <TextView
        android:id="@+id/resultView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Result will appear here"
        android:textSize="18sp"
        android:layout_marginTop="16dp" />

</LinearLayout>

JAVA — MainActivity.java

package com.example.currencyconverter;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class MainActivity extends AppCompatActivity {

    Spinner fromCurrency, toCurrency;
    EditText amountInput;
    TextView resultView;
    Button convertBtn;

    String[] list = {"INR", "USD", "EUR", "JPY"};

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

        fromCurrency = findViewById(R.id.fromCurrency);
        toCurrency = findViewById(R.id.toCurrency);
        amountInput = findViewById(R.id.amountInput);
        resultView = findViewById(R.id.resultView);
        convertBtn = findViewById(R.id.convertBtn);

        ArrayAdapter<String> ad = new ArrayAdapter<>(this,
                android.R.layout.simple_spinner_item, list);
        ad.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        fromCurrency.setAdapter(ad);
        toCurrency.setAdapter(ad);

        convertBtn.setOnClickListener(v -> convert());
    }

    private void convert() {
        String input = amountInput.getText().toString();
        if (input.isEmpty()) {
            resultView.setText("Enter amount first");
            return;
        }

        double amt = Double.parseDouble(input);

        double result = 0;
        String from = fromCurrency.getSelectedItem().toString();
        String to = toCurrency.getSelectedItem().toString();

        // Simple hardcoded conversions
        if (from.equals(to)) result = amt;
        else if (from.equals("INR") && to.equals("USD")) result = amt * 0.012;
        else if (from.equals("USD") && to.equals("INR")) result = amt * 83;
        else if (from.equals("EUR") && to.equals("INR")) result = amt * 90;
        else if (from.equals("INR") && to.equals("EUR")) result = amt * 0.011;
        else result = amt; // fallback

        resultView.setText("Converted: " + result);
    }
}

Instructions

• internet not required • no permissions needed


✅ PRACTICAL 3 — Registration Form using Explicit Intent


UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <EditText
            android:id="@+id/name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Full Name" />

        <EditText
            android:id="@+id/dobs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Date of Birth" />

        <TextView
            android:text="Gender"
            android:layout_marginTop="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <RadioGroup
            android:id="@+id/gender"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <RadioButton
                android:id="@+id/radio_male"
                android:text="Male"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <RadioButton
                android:id="@+id/radio_female"
                android:text="Female"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </RadioGroup>

        <TextView
            android:text="Rate your skills"
            android:layout_marginTop="12dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <RatingBar
            android:id="@+id/rating"
            android:numStars="5"
            android:stepSize="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:text="Languages Known"
            android:layout_marginTop="12dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <CheckBox
            android:id="@+id/check_english"
            android:text="English"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <CheckBox
            android:id="@+id/check_hindi"
            android:text="Hindi"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/submit"
            android:text="Submit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp" />

    </LinearLayout>
</ScrollView>


UI — activity_display.xml

<?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:orientation="vertical"
    android:padding="18dp">

    <TextView
        android:id="@+id/showName"
        android:textSize="18sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/showGender"
        android:layout_marginTop="10dp"
        android:textSize="18sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/showDob"
        android:layout_marginTop="10dp"
        android:textSize="18sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/showLang"
        android:layout_marginTop="10dp"
        android:textSize="18sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/showRating"
        android:layout_marginTop="10dp"
        android:textSize="18sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

JAVA — MainActivity.java

package com.example.registrationform;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class MainActivity extends AppCompatActivity {

    EditText name, dobs;
    RadioGroup gender;
    RatingBar skills;
    CheckBox english, hindi;
    Button submit;

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

        name = findViewById(R.id.name);
        dobs = findViewById(R.id.dobs);
        gender = findViewById(R.id.gender);
        skills = findViewById(R.id.rating);
        english = findViewById(R.id.check_english);
        hindi = findViewById(R.id.check_hindi);
        submit = findViewById(R.id.submit);

        submit.setOnClickListener(v -> {

            String nm = name.getText().toString();
            String dob = dobs.getText().toString();

            int id = gender.getCheckedRadioButtonId();
            String g = ((RadioButton)findViewById(id)).getText().toString();

            float rate = skills.getRating();

            String langs = "";
            if (english.isChecked()) langs += "English ";
            if (hindi.isChecked()) langs += "Hindi ";

            Intent i = new Intent(MainActivity.this, DisplayActivity.class);
            i.putExtra("n", nm);
            i.putExtra("d", dob);
            i.putExtra("g", g);
            i.putExtra("l", langs);
            i.putExtra("r", rate);
            startActivity(i);
        });
    }
}

JAVA — DisplayActivity.java

package com.example.registrationform;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class DisplayActivity extends AppCompatActivity {

    TextView name, gender, dob, lang, rating;

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

        name = findViewById(R.id.showName);
        gender = findViewById(R.id.showGender);
        dob = findViewById(R.id.showDob);
        lang = findViewById(R.id.showLang);
        rating = findViewById(R.id.showRating);

        name.setText("Name: " + getIntent().getStringExtra("n"));
        gender.setText("Gender: " + getIntent().getStringExtra("g"));
        dob.setText("DOB: " + getIntent().getStringExtra("d"));
        lang.setText("Languages: " + getIntent().getStringExtra("l"));
        rating.setText("Rating: " + getIntent().getFloatExtra("r", 0));
    }
}



Dont forget to add this in AndroidManifest.xml
<activity android:name=".DisplayActivity" />

📘 PRACTICAL 4 — Implicit Intent (Open URL, SMS, Share Text, Dial) + Receiver App


🅰 Sender App — com.alone_x.implicitintent

UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="14dp">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/urledittext"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Enter website URL" />

        <Button
            android:id="@+id/browsebutton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Open Website"
            android:layout_marginTop="8dp" />

        <EditText
            android:id="@+id/editTextPhone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Phone for SMS"
            android:inputType="phone"
            android:layout_marginTop="14dp" />

        <EditText
            android:id="@+id/editSmsText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SMS message"
            android:inputType="textMultiLine" />

        <Button
            android:id="@+id/smssendbutton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Send SMS Intent"
            android:layout_marginTop="8dp" />

        <EditText
            android:id="@+id/editTexttoApp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Text to share"
            android:layout_marginTop="14dp" />

        <Button
            android:id="@+id/gobutton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Share to other apps"
            android:layout_marginTop="8dp" />

        <EditText
            android:id="@+id/editCallPhone2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Phone to dial"
            android:inputType="phone"
            android:layout_marginTop="14dp" />

        <Button
            android:id="@+id/callbutton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Dial Number"
            android:layout_marginTop="8dp" />

    </LinearLayout>
</ScrollView>

JAVA — MainActivity.java (Sender)

package com.alone_x.implicitintent;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    EditText url, phone, smsMessage, appText, callNo;
    Button urlbutton, smsbutton, gobutton, callbutton;

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

        url = findViewById(R.id.urledittext);
        phone = findViewById(R.id.editTextPhone);
        smsMessage = findViewById(R.id.editSmsText);
        appText = findViewById(R.id.editTexttoApp);
        callNo = findViewById(R.id.editCallPhone2);

        urlbutton = findViewById(R.id.browsebutton);
        smsbutton = findViewById(R.id.smssendbutton);
        gobutton = findViewById(R.id.gobutton);
        callbutton = findViewById(R.id.callbutton);

        urlbutton.setOnClickListener(v -> {
            Uri uri = Uri.parse(url.getText().toString());
            Intent i = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(i);
        });

        smsbutton.setOnClickListener(v -> {
            Uri uri = Uri.parse("smsto:" + phone.getText().toString());
            Intent i = new Intent(Intent.ACTION_SENDTO, uri);
            i.putExtra("sms_body", smsMessage.getText().toString());
            startActivity(i);
        });

        gobutton.setOnClickListener(v -> {
            Intent i = new Intent(Intent.ACTION_SEND);
            i.setType("text/plain");
            i.putExtra(Intent.EXTRA_TEXT, appText.getText().toString());
            startActivity(i);
        });

        callbutton.setOnClickListener(v -> {
            Uri uri = Uri.parse("tel:" + callNo.getText().toString());
            Intent i = new Intent(Intent.ACTION_DIAL, uri);
            startActivity(i);
        });
    }
}

🅱 Receiver App — com.alonex.receiver

UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="18dp">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Incoming text will show here"
        android:textSize="18sp" />
</FrameLayout>

JAVA — MainActivity.java (Receiver)

package com.alonex.receiver;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView tv;

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

        tv = findViewById(R.id.tv1);
        Intent i = getIntent();
        String msg = i.getStringExtra(Intent.EXTRA_TEXT);
        if (msg != null) {
            tv.setText(msg);
        }
    }
}

Gradle (incase)

    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.9.0")

Manifest snippet (Receiver app)

Inside <activity ...>:

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="text/plain" />
</intent-filter>

📘 PRACTICAL 5 — Sign-In Page using SharedPreferences


UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:orientation="vertical"
    android:padding="20dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Username" />

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        android:inputType="textPassword"
        android:layout_marginTop="10dp" />

    <CheckBox
        android:id="@+id/checker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Remember me"
        android:layout_marginTop="8dp" />

    <Button
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Login"
        android:layout_marginTop="14dp" />

</LinearLayout>

JAVA — MainActivity.java

package com.example.practical5mc;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.*;

public class MainActivity extends AppCompatActivity {

    EditText username, password;
    Button btn;
    CheckBox check;
    int attempts = 3;
    SharedPreferences sp;

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

        username = findViewById(R.id.username);
        password = findViewById(R.id.password);
        btn = findViewById(R.id.login);
        check = findViewById(R.id.checker);

        sp = getSharedPreferences("spfile", MODE_PRIVATE);

        String savedUser = sp.getString("username", "");
        String savedPass = sp.getString("password", "");

        if (!savedUser.isEmpty() && !savedPass.isEmpty()) {
            username.setText(savedUser);
            password.setText(savedPass);
            check.setChecked(true);
        }

        btn.setOnClickListener(v -> {
            String u = username.getText().toString().trim();
            String p = password.getText().toString().trim();

            if (u.equals("admin") && p.equals("1234")) {

                if (check.isChecked()) {
                    SharedPreferences.Editor ed = sp.edit();
                    ed.putString("username", u);
                    ed.putString("password", p);
                    ed.apply();
                } else {
                    sp.edit().clear().apply();
                }

                startActivity(new Intent(MainActivity.this, Second.class));
                finish();
            } else {
                attempts--;
                showAttempts();

                if (attempts == 0) {
                    btn.setEnabled(false);
                    Toast.makeText(this, "Login disabled", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private void showAttempts() {
        AlertDialog.Builder b = new AlertDialog.Builder(this);
        b.setTitle("Attempts Left");
        b.setMessage("You have " + attempts + " attempts left.");
        b.setPositiveButton("OK", (d, which) -> d.dismiss());
        b.show();
    }
}

JAVA — Second.java

package com.example.practical5mc;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class Second extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView tv = new TextView(this);
        tv.setText("Logged in successfully!");
        tv.setTextSize(24f);

        setContentView(tv);
    }
}
add this:
   <activity android:name=".Second"/>

📘 PRACTICAL 6 — Android Notification


UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="18dp">

    <Button
        android:id="@+id/notifs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Notification"
        android:layout_gravity="center" />

</FrameLayout>

JAVA — MainActivity.java

package com.example.practical6mc;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button notification;
    NotificationManager nm;
    String CHANNEL_ID = "CHANNEL1";

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

        notification = findViewById(R.id.notifs);

        nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel ch = new NotificationChannel(
                    CHANNEL_ID,
                    "SIESCOMS",
                    NotificationManager.IMPORTANCE_HIGH
            );
            nm.createNotificationChannel(ch);
        }

        notification.setOnClickListener(v -> showNotif());
    }

    private void showNotif() {
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("https://siescoms.edu.in"));
        PendingIntent pi = PendingIntent.getActivity(
                this, 0, i, PendingIntent.FLAG_IMMUTABLE);

        NotificationCompat.Builder b = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setSmallIcon(R.drawable.ic_launcher_foreground)
                .setContentTitle("Simple Notification")
                .setContentText("Tap to open website")
                .setContentIntent(pi)
                .setAutoCancel(true);

        nm.notify(1, b.build());
    }
}

Instruction: put an icon called notif.png in res/drawable/.

Manifest:

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

📘 PRACTICAL 7 — Internal & External Storage


UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:orientation="vertical"
    android:padding="16dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <MultiAutoCompleteTextView
        android:id="@+id/multi"
        android:layout_width="match_parent"
        android:layout_height="160dp"
        android:hint="Enter text here" />

    <Button
        android:id="@+id/btnstore"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Save Internal"
        android:layout_marginTop="8dp" />

    <Button
        android:id="@+id/btnretrieve"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Read Internal"
        android:layout_marginTop="6dp" />

    <Button
        android:id="@+id/btnextstore"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Save External"
        android:layout_marginTop="6dp" />

    <Button
        android:id="@+id/btnextread"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Read External"
        android:layout_marginTop="6dp" />

</LinearLayout>

UI — activity_display.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="16dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="File content will appear here" />

</FrameLayout>

JAVA — MainActivity.java

package com.example.InternalExternalStorage;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Button;
import android.widget.MultiAutoCompleteTextView;
import android.widget.Toast;

import java.io.*;

public class MainActivity extends AppCompatActivity {

    Button btnstore, btnretrieve, btnextread, btnextstore;
    MultiAutoCompleteTextView ed1;
    File myFile;
    String folder = "dir1";

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

        btnstore = findViewById(R.id.btnstore);
        btnretrieve = findViewById(R.id.btnretrieve);
        btnextread = findViewById(R.id.btnextread);
        btnextstore = findViewById(R.id.btnextstore);
        ed1 = findViewById(R.id.multi);

        btnstore.setOnClickListener(v -> saveToInternal(ed1.getText().toString()));
        btnretrieve.setOnClickListener(v -> readFromInternal());
        btnextstore.setOnClickListener(v -> saveToExternal(ed1.getText().toString()));
        btnextread.setOnClickListener(v -> readFromExternal());
    }

    private void saveToInternal(String data) {
        try {
            FileOutputStream fos = openFileOutput("demo.txt", MODE_PRIVATE);
            OutputStreamWriter w = new OutputStreamWriter(fos);
            w.write(data);
            w.close();
            Toast.makeText(this, "Saved to internal", Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void readFromInternal() {
        StringBuilder buffer = new StringBuilder();
        try {
            FileInputStream fis = openFileInput("demo.txt");
            InputStreamReader r = new InputStreamReader(fis);
            char[] cbuf = new char[256];
            int count;
            while ((count = r.read(cbuf)) > 0) {
                buffer.append(cbuf, 0, count);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        Intent i = new Intent(this, MainDisplay.class);
        i.putExtra("value", buffer.toString());
        startActivity(i);
    }

    private void saveToExternal(String data) {
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
            myFile = new File(getExternalFilesDir(folder), "demo.txt");
            try {
                FileOutputStream fos = new FileOutputStream(myFile);
                fos.write(data.getBytes());
                fos.close();
                Toast.makeText(this, "Saved to external", Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    private void readFromExternal() {
        StringBuilder buffer = new StringBuilder();
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
            myFile = new File(getExternalFilesDir(folder), "demo.txt");
            try {
                FileInputStream fis = new FileInputStream(myFile);
                BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                String line;
                while ((line = br.readLine()) != null) {
                    buffer.append(line).append("\n");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        Intent i = new Intent(this, MainDisplay.class);
        i.putExtra("value", buffer.toString());
        startActivity(i);
    }
}

JAVA — MainDisplay.java

package com.example.InternalExternalStorage;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class MainDisplay extends AppCompatActivity {

    TextView tv;

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

        tv = findViewById(R.id.tv1);
        String val = getIntent().getStringExtra("value");
        tv.setText(val);
    }
}

⭐ PRACTICAL 8 — SQLite Database CRUD Operations


UI — activity_main.xml

(Main screen with input fields + CRUD buttons)

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="14dp">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/rno"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Roll No"
            android:inputType="number" />

        <EditText
            android:id="@+id/name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Name"
            android:layout_marginTop="8dp" />

        <EditText
            android:id="@+id/gender"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Gender"
            android:layout_marginTop="8dp" />

        <EditText
            android:id="@+id/score1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Score 1"
            android:inputType="number"
            android:layout_marginTop="8dp" />

        <EditText
            android:id="@+id/score2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Score 2"
            android:inputType="number"
            android:layout_marginTop="8dp" />

        <Button android:id="@+id/add" android:text="Insert"
            android:layout_width="match_parent" android:layout_height="wrap_content"
            android:layout_marginTop="14dp"/>

        <Button android:id="@+id/view" android:text="View All"
            android:layout_width="match_parent" android:layout_height="wrap_content"
            android:layout_marginTop="8dp"/>

        <Button android:id="@+id/search" android:text="Search"
            android:layout_width="match_parent" android:layout_height="wrap_content"
            android:layout_marginTop="8dp"/>

        <Button android:id="@+id/update" android:text="Update"
            android:layout_width="match_parent" android:layout_height="wrap_content"
            android:layout_marginTop="8dp"/>

        <Button android:id="@+id/delete" android:text="Delete"
            android:layout_width="match_parent" android:layout_height="wrap_content"
            android:layout_marginTop="8dp"/>

    </LinearLayout>
</ScrollView>

UI — activity_viewdata.xml

(This will show the retrieved data)

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="16dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/record"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp" />

</ScrollView>

JAVA — DBHelper.java

package com.example.practical8mc;

import android.content.*;
import android.database.Cursor;
import android.database.sqlite.*;

public class DBHelper extends SQLiteOpenHelper {

    public DBHelper(Context c) {
        super(c, "studentdb", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE student(rno INTEGER PRIMARY KEY, name TEXT, gender TEXT, s1 INTEGER, s2 INTEGER)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
        db.execSQL("DROP TABLE IF EXISTS student");
        onCreate(db);
    }

    public void insert(int rno, String name, String gender, int s1, int s2) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("INSERT INTO student VALUES(?,?,?,?,?)",
                new Object[]{rno, name, gender, s1, s2});
    }

    public Cursor viewAll() {
        SQLiteDatabase db = getReadableDatabase();
        return db.rawQuery("SELECT * FROM student", null);
    }

    public Cursor search(int rno) {
        SQLiteDatabase db = getReadableDatabase();
        return db.rawQuery("SELECT * FROM student WHERE rno=?", new String[]{String.valueOf(rno)});
    }

    public void update(int rno, String name, String gender, int s1, int s2) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("UPDATE student SET name=?, gender=?, s1=?, s2=? WHERE rno=?",
                new Object[]{name, gender, s1, s2, rno});
    }

    public void delete(int rno) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("DELETE FROM student WHERE rno=?", new Object[]{String.valueOf(rno)});
    }
}

JAVA — MainActivity.java

package com.example.practical8mc;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.*;

public class MainActivity extends AppCompatActivity {

    EditText rno, name, gender, s1, s2;
    Button add, view, search, update, delete;
    DBHelper db;

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

        rno = findViewById(R.id.rno);
        name = findViewById(R.id.name);
        gender = findViewById(R.id.gender);
        s1 = findViewById(R.id.score1);
        s2 = findViewById(R.id.score2);
        
        add = findViewById(R.id.add);
        view = findViewById(R.id.view);
        search = findViewById(R.id.search);
        update = findViewById(R.id.update);
        delete = findViewById(R.id.delete);

        db = new DBHelper(this);

        add.setOnClickListener(v -> {
            db.insert(
                Integer.parseInt(rno.getText().toString()),
                name.getText().toString(),
                gender.getText().toString(),
                Integer.parseInt(s1.getText().toString()),
                Integer.parseInt(s2.getText().toString())
            );
            Toast.makeText(this, "Inserted", Toast.LENGTH_SHORT).show();
        });

        view.setOnClickListener(v -> openData(db.viewAll()));

        search.setOnClickListener(v -> {
            int roll = Integer.parseInt(rno.getText().toString());
            openData(db.search(roll));
        });

        update.setOnClickListener(v -> {
            db.update(
                    Integer.parseInt(rno.getText().toString()),
                    name.getText().toString(),
                    gender.getText().toString(),
                    Integer.parseInt(s1.getText().toString()),
                    Integer.parseInt(s2.getText().toString())
            );
            Toast.makeText(this, "Updated", Toast.LENGTH_SHORT).show();
        });

        delete.setOnClickListener(v -> {
            db.delete(Integer.parseInt(rno.getText().toString()));
            Toast.makeText(this, "Deleted", Toast.LENGTH_SHORT).show();
        });
    }

    private void openData(Cursor c) {
        StringBuilder sb = new StringBuilder();
        while (c.moveToNext()) {
            sb.append("Rno: ").append(c.getInt(0)).append("\n")
              .append("Name: ").append(c.getString(1)).append("\n")
              .append("Gender: ").append(c.getString(2)).append("\n")
              .append("Score1: ").append(c.getInt(3)).append("\n")
              .append("Score2: ").append(c.getInt(4)).append("\n\n");
        }

        Intent i = new Intent(this, ViewData.class);
        i.putExtra("data", sb.toString());
        startActivity(i);
    }
}

JAVA — ViewData.java

package com.example.practical8mc;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class ViewData extends AppCompatActivity {

    TextView rec;

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

        rec = findViewById(R.id.record);
        rec.setText(getIntent().getStringExtra("data"));
    }
}
AndroidManifest: <activity android:name=".ViewData"/>

⭐ PRACTICAL 9 — Firebase Realtime Database CRUD

(This version uses simple Firebase push, update, delete)


UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <LinearLayout
        android:id="@+id/mainLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <!-- Employee Number -->
        <EditText
            android:id="@+id/eno"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Employee No"
            android:inputType="number"
            android:layout_marginBottom="8dp"/>

        <!-- Name -->
        <EditText
            android:id="@+id/name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Name"
            android:inputType="textPersonName"
            android:layout_marginBottom="8dp"/>

        <!-- Salary -->
        <EditText
            android:id="@+id/salary"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Salary"
            android:inputType="numberDecimal"
            android:layout_marginBottom="8dp"/>

        <!-- Department -->
        <EditText
            android:id="@+id/dept"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Department"
            android:inputType="text"
            android:layout_marginBottom="12dp"/>

        <!-- Action Buttons -->
        <Button
            android:id="@+id/add"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Add"
            android:layout_marginBottom="8dp"/>

        <Button
            android:id="@+id/view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="View"
            android:layout_marginBottom="8dp"/>

        <Button
            android:id="@+id/update"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Update"
            android:layout_marginBottom="8dp"/>

        <Button
            android:id="@+id/delete"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Delete"
            android:layout_marginBottom="12dp"/>

        <!-- ListView -->
        <ListView
            android:id="@+id/listAll"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:divider="@android:color/darker_gray"
            android:dividerHeight="1dp"
            android:layout_marginTop="16dp"/>
    </LinearLayout>
</ScrollView>


JAVA — MainActivity.java

package com.example.practical9mc;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.*;
import com.google.firebase.database.*;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    EditText eno, name, salary, dept;
    Button add, view, update, delete;
    ListView list;
    ArrayList<String> arr;
    ArrayAdapter<String> ad;
    DatabaseReference db;

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

        eno = findViewById(R.id.eno);
        name = findViewById(R.id.name);
        salary = findViewById(R.id.salary);
        dept = findViewById(R.id.dept);

        add = findViewById(R.id.add);
        view = findViewById(R.id.view);
        update = findViewById(R.id.update);
        delete = findViewById(R.id.delete);

        list = findViewById(R.id.listAll);
        arr = new ArrayList<>();
        ad = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, arr);
        list.setAdapter(ad);

        db = FirebaseDatabase.getInstance().getReference("employees");

        add.setOnClickListener(v -> {
            String id = eno.getText().toString();
            Employee obj = new Employee(
                    id,
                    name.getText().toString(),
                    salary.getText().toString(),
                    dept.getText().toString()
            );
            db.child(id).setValue(obj);
            Toast.makeText(this, "Added", Toast.LENGTH_SHORT).show();
        });

        view.setOnClickListener(v -> db.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot d) {
                arr.clear();
                for (DataSnapshot s : d.getChildren()) {
                    Employee e = s.getValue(Employee.class);
                    arr.add(e.toString());
                }
                ad.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(DatabaseError e) {}
        }));

        update.setOnClickListener(v -> {
            String id = eno.getText().toString();
            db.child(id).child("name").setValue(name.getText().toString());
            db.child(id).child("salary").setValue(salary.getText().toString());
            db.child(id).child("dept").setValue(dept.getText().toString());
            Toast.makeText(this, "Updated", Toast.LENGTH_SHORT).show();
        });

        delete.setOnClickListener(v -> {
            String id = eno.getText().toString();
            db.child(id).removeValue();
            Toast.makeText(this, "Deleted", Toast.LENGTH_SHORT).show();
        });
    }
}

JAVA — Employee.java

package com.example.practical9mc;

public class Employee {

    String eno, name, salary, dept;

    public Employee() {}

    public Employee(String eno, String name, String salary, String dept) {
        this.eno = eno;
        this.name = name;
        this.salary = salary;
        this.dept = dept;
    }

    public String toString() {
        return "E.No: " + eno + "\nName: " + name + "\nSalary: " + salary + "\nDept: " + dept;
    }
}

⭐ PRACTICAL 10 — Image Animation (Translate, Scale, Rotate, Fade)


UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="14dp">

    <ImageView
        android:id="@+id/image"
        android:layout_width="220dp"
        android:layout_height="220dp"
        android:src="@drawable/image"
        android:layout_centerHorizontal="true" />

    <LinearLayout
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="16dp"
        android:gravity="center"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button android:id="@+id/translate" android:text="Translate"/>
        <Button android:id="@+id/scale" android:text="Scale" android:layout_marginLeft="4dp"/>
        <Button android:id="@+id/rotate" android:text="Rotate" android:layout_marginLeft="4dp"/>
        <Button android:id="@+id/fade" android:text="Fade" android:layout_marginLeft="4dp"/>
    </LinearLayout>
</RelativeLayout>

JAVA — MainActivity.java

package com.example.practical10mc;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.animation.*;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    ImageView img;
    Button translate, scale, rotate, fade;

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

        img = findViewById(R.id.image);
        translate = findViewById(R.id.translate);
        scale = findViewById(R.id.scale);
        rotate = findViewById(R.id.rotate);
        fade = findViewById(R.id.fade);

        translate.setOnClickListener(v -> {
            Animation a = new TranslateAnimation(0, 300, 0, 0);
            a.setDuration(800);
            img.startAnimation(a);
        });

        scale.setOnClickListener(v -> {
            Animation a = new ScaleAnimation(1, 1.6f, 1, 1.6f);
            a.setDuration(800);
            img.startAnimation(a);
        });

        rotate.setOnClickListener(v -> {
            Animation a = new RotateAnimation(0, 360,
                    Animation.RELATIVE_TO_SELF, 0.5f,
                    Animation.RELATIVE_TO_SELF, 0.5f);
            a.setDuration(800);
            img.startAnimation(a);
        });

        fade.setOnClickListener(v -> {
            Animation a = new AlphaAnimation(1, 0);
            a.setDuration(800);
            img.startAnimation(a);
        });
    }
}

⭐ PRACTICAL 11 — Audio & Video Playback


UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp">

    <Button
        android:id="@+id/btnPlay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Play Audio" />

    <Button
        android:id="@+id/btnPause"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Pause Audio" />

    <Button
        android:id="@+id/btnStop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Stop Audio" />

    <Button
        android:id="@+id/btnVideo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Play Video" />

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:layout_marginTop="20dp" />

</LinearLayout>

JAVA — MainActivity.java

package com.example.audio_video;

import androidx.appcompat.app.AppCompatActivity;

import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Button;
import android.widget.VideoView;
import android.widget.MediaController;

public class MainActivity extends AppCompatActivity {

    Button play, pause, stop, video;
    MediaPlayer mp;
    VideoView videoView;
    MediaController mediaController;

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

        play = findViewById(R.id.btnPlay);
        pause = findViewById(R.id.btnPause);
        stop = findViewById(R.id.btnStop);
        video = findViewById(R.id.btnVideo);
        videoView = findViewById(R.id.videoView);

        // Load audio file
        mp = MediaPlayer.create(this, R.raw.clip_12);

        // === AUDIO BUTTONS ===
        play.setOnClickListener(v -> mp.start());

        pause.setOnClickListener(v -> {
            if (mp.isPlaying()) {
                mp.pause();
            }
        });

        stop.setOnClickListener(v -> {
            if (mp.isPlaying()) {
                mp.stop();
                mp = MediaPlayer.create(this, R.raw.clip_12); // reload after stop
            }
        });

        // === VIDEO PLAYER WITH CONTROLS ===
        mediaController = new MediaController(this);
        mediaController.setAnchorView(videoView);

        video.setOnClickListener(v -> {
            String path = "android.resource://" + getPackageName() + "/" + R.raw.clip_12;
            Uri uri = Uri.parse(path);

            videoView.setVideoURI(uri);
            videoView.setMediaController(mediaController);
            videoView.start();
        });
    }
}

⭐ PRACTICAL 12 — Current Location


UI — activity_main.xml

<?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:padding="20dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/txtlocation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Your Location Will Appear Here"
        android:textSize="18sp"
        android:padding="16dp" />

    <Button
        android:id="@+id/btnlocation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Get Location"
        android:layout_marginTop="20dp" />

</LinearLayout>

JAVA — MainActivity.java

package com.example.location;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.util.List;
import java.util.Locale;

public class MainActivity extends AppCompatActivity implements LocationListener {

    private LocationManager lm;
    Button btnlocation;
    TextView txtlocation;

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

        txtlocation = findViewById(R.id.txtlocation);
        btnlocation = findViewById(R.id.btnlocation);

        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 100);
        }

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

    private void getLocation() {
        lm = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 100, MainActivity.this);
    }

    @Override
    public void onLocationChanged(@NonNull Location location) {
        Toast.makeText(getApplicationContext(),location.getLongitude()
                +  " " +location.getLatitude(),Toast.LENGTH_LONG).show();
        Geocoder geocoder = new Geocoder(MainActivity.this, Locale.getDefault());
        try {
            List <Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
            String address = addresses.get(0).getAddressLine(0);
            txtlocation.setText(address);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

Manifest Permissions

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


⭐ PRACTICAL 13 — REST API (Volley + OkHttp + Retrofit)

One UI is shared for all.


Mocki json format:

{
  "userId": 1,
  "id": 101,
  "title": "Finish Android project setup",
  "completed": false
}

Using the API: https://mocki.io/v1/c887be0f-54f8-4f26-a237-2364c10fc704


📘 UI — activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    android:gravity="center_horizontal">

    <!-- Volley Button -->
    <Button
        android:id="@+id/volleyBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Fetch using Volley"
        android:layout_marginBottom="8dp"/>

    <!-- Retrofit Button -->
    <Button
        android:id="@+id/retrofitBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Fetch using Retrofit"
        android:layout_marginBottom="8dp"/>

    <!-- OkHttp Button -->
    <Button
        android:id="@+id/okhttpBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Fetch using OkHttp"
        android:layout_marginBottom="16dp"/>

    <!-- Response Text -->
    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="API Response will appear here…"
        android:textSize="16sp"
        android:textColor="@android:color/black"
        android:padding="12dp"
        android:background="@android:color/darker_gray"/>
</LinearLayout>


⭐ MODEL — Todo.java

package com.example.mprog9;

public class Todo {
    public int userId;
    public int id;
    public String title;
    public boolean completed;
}

⭐ INTERFACE — Api.java

package com.example.mprog9;

import retrofit2.Call;
import retrofit2.http.GET;

public interface Api {

    @GET("c887be0f-54f8-4f26-a237-2364c10fc704")
    Call<Todo> getTodo();
}

⭐ MAIN SCREEN — MainActivity.java

(Handles: Volley, Button to RetrofitActivity, Button to OkHttpActivity)

package com.example.mprog9;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.*;

import com.android.volley.Request;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

public class MainActivity extends AppCompatActivity {

    TextView tv;
    Button volleyBtn, retrofitBtn, okhttpBtn;

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

        volleyBtn = findViewById(R.id.volleyBtn);
        retrofitBtn = findViewById(R.id.retrofitBtn);
        okhttpBtn = findViewById(R.id.okhttpBtn);
        tv = findViewById(R.id.tv);

        // VOLLEY
        volleyBtn.setOnClickListener(v -> {
            String url = "https://mocki.io/v1/c887be0f-54f8-4f26-a237-2364c10fc704";

            StringRequest sr = new StringRequest(Request.Method.GET, url,
                    response -> tv.setText(response),
                    error -> tv.setText("Error: " + error.toString()));

            Volley.newRequestQueue(this).add(sr);
        });

        // RETROFIT
        retrofitBtn.setOnClickListener(v ->
                startActivity(new Intent(MainActivity.this, RetrofitActivity.class))
        );

        // OKHTTP
        okhttpBtn.setOnClickListener(v ->
                startActivity(new Intent(MainActivity.this, OkHttpActivity.class))
        );
    }
}

⭐ RETROFIT — RetrofitActivity.java

package com.example.mprog9;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.*;

import retrofit2.*;
import retrofit2.converter.gson.GsonConverterFactory;

public class RetrofitActivity extends AppCompatActivity {

    TextView tv;
    Button btn;

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

        btn = findViewById(R.id.retrofitBtn);
        tv = findViewById(R.id.tv);

        btn.setOnClickListener(v -> fetchData());
    }

    private void fetchData() {

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://mocki.io/v1/")   // must end with /
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        Api api = retrofit.create(Api.class);

        api.getTodo().enqueue(new Callback<Todo>() {
            @Override
            public void onResponse(Call<Todo> call, Response<Todo> response) {
                if (response.body() != null) {
                    tv.setText("Title: " + response.body().title);
                    tv.append("\nCompleted: " + response.body().completed);
                }
            }

            @Override
            public void onFailure(Call<Todo> call, Throwable t) {
                tv.setText("Error occurred!");
            }
        });
    }
}

⭐ OKHTTP — OkHttpActivity.java

package com.example.mprog9;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.*;

import java.io.IOException;

import okhttp3.*;

public class OkHttpActivity extends AppCompatActivity {

    TextView tv;
    Button btn;

    OkHttpClient client = new OkHttpClient();

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

        btn = findViewById(R.id.okhttpBtn);
        tv = findViewById(R.id.tv);

        btn.setOnClickListener(v -> fetchUsingOkHttp());
    }

    private void fetchUsingOkHttp() {

        Request request = new Request.Builder()
                .url("https://mocki.io/v1/c887be0f-54f8-4f26-a237-2364c10fc704")
                .build();

        client.newCall(request).enqueue(new Callback() {

            @Override
            public void onFailure(Call call, IOException e) {
                runOnUiThread(() -> tv.setText("Error: " + e.getMessage()));
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String res = response.body().string();
                runOnUiThread(() -> tv.setText(res));
            }
        });
    }
}

⭐ Manifest Permission

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

⭐ Gradle Dependencies

implementation 'com.android.volley:volley:1.2.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'

🚀 PRACTICAL 14 — Simple Calculator (Flutter)

Using basic buttons, setState, and evaluation logic WITHOUT external packages.


🔹 UI + LOGIC — main.dart

import 'package:flutter/material.dart';
import 'package:math_expressions/math_expressions.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: CalcPage(),
    );
  }
}

class CalcPage extends StatefulWidget {
  @override
  _CalcPageState createState() => _CalcPageState();
}

class _CalcPageState extends State<CalcPage> {
  String expression = "";
  String result = "";

  buttonPressed(String text) {
    setState(() {
      if (text == "C") {
        expression = "";
        result = "";
      } else if (text == "=") {
        try {
          Parser p = Parser();
          Expression exp = p.parse(expression);
          ContextModel cm = ContextModel();
          result = exp.evaluate(EvaluationType.REAL, cm).toString();
        } catch (e) {
          result = "Error";
        }
      } else {
        expression += text;
      }
    });
  }

  Widget btn(String text) {
    return Expanded(
      child: ElevatedButton(
        onPressed: () => buttonPressed(text),
        child: Text(text, style: TextStyle(fontSize: 24)),
        style: ElevatedButton.styleFrom(
          padding: EdgeInsets.all(22),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Calculator")),
      body: Column(
        children: [
          Container(
            padding: EdgeInsets.all(20),
            alignment: Alignment.centerRight,
            child: Text(expression, style: TextStyle(fontSize: 28)),
          ),
          Container(
            padding: EdgeInsets.all(20),
            alignment: Alignment.centerRight,
            child: Text(result, style: TextStyle(fontSize: 34, fontWeight: FontWeight.bold)),
          ),
          Spacer(),
          Column(
            children: [
              Row(children: [btn("7"), btn("8"), btn("9"), btn("/")]),
              Row(children: [btn("4"), btn("5"), btn("6"), btn("*")]),
              Row(children: [btn("1"), btn("2"), btn("3"), btn("-")]),
              Row(children: [btn("C"), btn("0"), btn("."), btn("+")]),
              Row(children: [btn("=")]),
            ],
          )
        ],
      ),
    );
  }
}

✔ Instructions

Run in VS Code or Android Studio. Add dependency to pubspec.yaml:

math_expressions: ^2.4.0

🚀 PRACTICAL 15 — Login Form Validation (Flutter)

Simple username & password validation.


🔹 UI + LOGIC — main.dart

import 'package:flutter/material.dart';

void main() => runApp(LoginApp());

class LoginApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: LoginPage(),
      debugShowCheckedModeBanner: false,
    );
  }
}

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  TextEditingController user = TextEditingController();
  TextEditingController pass = TextEditingController();
  String message = "";

  validate() {
    String u = user.text;
    String p = pass.text;

    setState(() {
      if (u == "admin" && p == "1234") {
        message = "Login Successful!";
      } else if (u.isEmpty || p.isEmpty) {
        message = "Please enter both fields";
      } else {
        message = "Invalid Credentials";
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Login Form")),
      body: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          children: [
            TextField(
              controller: user,
              decoration: InputDecoration(labelText: "Username"),
            ),
            SizedBox(height: 10),
            TextField(
              controller: pass,
              decoration: InputDecoration(labelText: "Password"),
              obscureText: true,
            ),
            SizedBox(height: 20),
            ElevatedButton(onPressed: validate, child: Text("Login")),
            SizedBox(height: 20),
            Text(message, style: TextStyle(fontSize: 18))
          ],
        ),
      ),
    );
  }
}

✔ Instructions

No packages needed. This validates static username/password.


🚀 PRACTICAL 16 — ListView & Snackbar (Add, Remove items)

Dynamic List + Snackbar confirmation.


🔹 UI + LOGIC — main.dart

import 'package:flutter/material.dart';

void main() => runApp(ListApp());

class ListApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ListPage(),
      debugShowCheckedModeBanner: false,
    );
  }
}

class ListPage extends StatefulWidget {
  @override
  _ListPageState createState() => _ListPageState();
}

class _ListPageState extends State<ListPage> {
  List<String> items = [];
  TextEditingController t = TextEditingController();

  addItem() {
    if (t.text.isNotEmpty) {
      setState(() {
        items.add(t.text);
      });
      ScaffoldMessenger.of(context)
          .showSnackBar(SnackBar(content: Text("Item Added")));
      t.clear();
    }
  }

  removeItem(int index) {
    setState(() {
      items.removeAt(index);
    });
    ScaffoldMessenger.of(context)
        .showSnackBar(SnackBar(content: Text("Item Removed")));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("ListView Example")),
      body: Column(
        children: [
          Padding(
            padding: EdgeInsets.all(12),
            child: TextField(
              controller: t,
              decoration: InputDecoration(
                labelText: "Enter item",
                suffixIcon: IconButton(
                  icon: Icon(Icons.add),
                  onPressed: addItem,
                ),
              ),
            ),
          ),
          Expanded(
            child: ListView.builder(
              itemCount: items.length,
              itemBuilder: (c, i) => ListTile(
                title: Text(items[i]),
                trailing: IconButton(
                  icon: Icon(Icons.delete, color: Colors.red),
                  onPressed: () => removeItem(i),
                ),
              ),
            ),
          )
        ],
      ),
    );
  }
}

✔ Instructions

No extra dependencies. Demonstrates ListView, Add, Remove, Snackbar.


🚀 PRACTICAL 17 — Fetch API Data (HTTP GET Request)

Using the built-in http package.


🔹 UI + LOGIC — main.dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'employee.dart';

void main() {
  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,
    home: EmployeeListScreen(),
  ));
}

class EmployeeListScreen extends StatefulWidget {
  @override
  _EmployeeListScreenState createState() => _EmployeeListScreenState();
}

class _EmployeeListScreenState extends State<EmployeeListScreen> {
  List<Employee> empList = [];
  bool loading = false;

  fetchEmployees() async {
    setState(() {
      loading = true;
    });

    String url = "https://mocki.io/v1/a81e7b8d-e519-42d8-890a-ffb28e41bbec";

    final response = await http.get(Uri.parse(url));

    if (response.statusCode == 200) {
      List data = jsonDecode(response.body);

      empList = data.map((e) => Employee.fromJson(e)).toList();

      setState(() {
        loading = false;
      });
    } else {
      setState(() {
        loading = false;
      });
      print("Error fetching data");
    }
  }

  @override
  void initState() {
    super.initState();
    fetchEmployees();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Employee Details (REST API)"),
      ),
      body: loading
          ? Center(child: CircularProgressIndicator())
          : ListView.builder(
        itemCount: empList.length,
        itemBuilder: (context, index) {
          Employee e = empList[index];

          return Card(
            elevation: 4,
            margin: EdgeInsets.all(10),
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(12),
            ),
            child: Padding(
              padding: EdgeInsets.all(14),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text("Employee ID: ${e.empid}",
                      style: TextStyle(
                          fontWeight: FontWeight.bold, fontSize: 18)),
                  SizedBox(height: 5),
                  Text("Name: ${e.empname}",
                      style: TextStyle(fontSize: 16)),
                  SizedBox(height: 5),
                  Text("Department: ${e.dept}",
                      style: TextStyle(fontSize: 16)),
                  SizedBox(height: 5),
                  Text("Salary: ₹${e.salary}",
                      style: TextStyle(
                          fontSize: 16, color: Colors.green[700])),
                ],
              ),
            ),
          );
        },
      ),
    );
  }
}

employee.dart

class Employee {
  final int empid;
  final String empname;
  final int salary;
  final String dept;

  Employee({
    required this.empid,
    required this.empname,
    required this.salary,
    required this.dept,
  });

  factory Employee.fromJson(Map<String, dynamic> j) {
    return Employee(
      empid: j["empid"],
      empname: j["empname"],
      salary: j["salary"],
      dept: j["dept"],
    );
  }
}

✔ Instructions

Add the http package in pubspec.yaml:

http: ^1.1.0

mocki link: https://mocki.io/v1/a81e7b8d-e519-42d8-890a-ffb28e41bbec

[
  {
    "empid": 101,
    "empname": "Alice Johnson",
    "salary": 55000,
    "dept": "HR"
  },
  {
    "empid": 102,
    "empname": "Bob Smith",
    "salary": 62000,
    "dept": "Finance"
  },
  {
    "empid": 103,
    "empname": "Charlie Davis",
    "salary": 48000,
    "dept": "IT"
  },
  {
    "empid": 104,
    "empname": "Diana Lee",
    "salary": 70000,
    "dept": "Marketing"
  },
  {
    "empid": 105,
    "empname": "Ethan Brown",
    "salary": 53000,
    "dept": "Operations"
  },
  {
    "empid": 106,
    "empname": "Fiona White",
    "salary": 60000,
    "dept": "Sales"
  }
]
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft