Open In App

How to Add Memes Using API Call in Android?

Last Updated : 15 May, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Application Programming Interface calling is the process of making requests to external web-based services to retrieve or manipulate data. APIs provide a standardized way for different software applications to communicate with each other. It involves sending a request from one application to another over the internet using a specific set of rules and protocols. The requesting application sends an API request to the target application, which then processes the request and sends back a response containing the requested data. API calls can be done using various programming languages and tools, such as cURL, Postman, Python, Java, and many others. 

Meme

A meme is a cultural phenomenon that spreads rapidly through the internet, typically in the form of humorous images, video, or piece of text that is shared widely and often parodied or adapted.

Step-by-Step Implementation

Step 1: Create a New Project in Android Studio

To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Java as the programming language.

Step 2: Working with the activity_main.xml file

Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file.

XML




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:background="#F3FCFF"
    tools:context=".MainActivity">
  
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="My Meme App"
        android:textSize="40sp"
        android:textStyle="bold"
        android:textColor="#006875"
        android:layout_marginTop="40dp"/>
  
    <androidx.cardview.widget.CardView
        android:layout_width="340dp"
        android:layout_height="500dp"
        android:layout_marginTop="15dp"
        android:layout_gravity="center_horizontal"
        app:cardCornerRadius="25dp">
  
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
  
            <ImageView
                android:id="@+id/imgMeme"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingLeft="20dp"
                android:scaleType="fitCenter"
                android:paddingTop="20dp"
                android:paddingRight="20dp" />
  
            <ProgressBar
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="150dp"
                android:visibility="invisible"/>
        </RelativeLayout>
  
  
    </androidx.cardview.widget.CardView>
  
    <androidx.cardview.widget.CardView
        android:layout_width="200dp"
        android:layout_height="60dp"
        app:cardCornerRadius="30dp"
        android:layout_marginTop="20dp"
        android:outlineAmbientShadowColor="@color/black"
        android:outlineSpotShadowColor="@color/white">
  
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <ImageView
                android:id="@+id/btnShare"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_marginTop="10dp"
                android:layout_marginLeft="30dp"
                android:src="@drawable/share"/>
  
            <ImageView
                android:id="@+id/btnNext"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_marginTop="10dp"
                android:src="@drawable/next"
                android:layout_marginLeft="120dp"/>
        </RelativeLayout>
    </androidx.cardview.widget.CardView>
  
</LinearLayout>


Output UI:

 

Step 3:

In your java folder create a new java file. Add this code to your new Java file.

Java




package com.anas.memeshareapp;
  
import android.content.Context;
import android.graphics.Bitmap;
import android.util.LruCache;
  
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
  
public class MySingleton {
  
    private static MySingleton instance;
    private RequestQueue requestQueue;
    private ImageLoader imageLoader;
    private static Context ctx;
  
    private MySingleton(Context context) {
        ctx = context;
        requestQueue = getRequestQueue();
  
        imageLoader = new ImageLoader(requestQueue,
                new ImageLoader.ImageCache() {
                    private final LruCache<String, Bitmap>
                            cache = new LruCache<String, Bitmap>(20);
  
                    @Override
                    public Bitmap getBitmap(String url) {
                        return cache.get(url);
                    }
  
                    @Override
                    public void putBitmap(String url, Bitmap bitmap) {
                        cache.put(url, bitmap);
                    }
                });
    }
  
    public static synchronized MySingleton getInstance(Context context) {
        if (instance == null) {
            instance = new MySingleton(context);
        }
        return instance;
    }
  
    public RequestQueue getRequestQueue() {
        if (requestQueue == null) {
            // getApplicationContext() is key, it keeps you from leaking the
            // Activity or BroadcastReceiver if someone passes one in.
            requestQueue = Volley.newRequestQueue(ctx.getApplicationContext());
        }
        return requestQueue;
    }
  
    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }
  
    public ImageLoader getImageLoader() {
        return imageLoader;
    }
}


Step 4: Working with the MainActivity.java file

Go to the MainActivity.java file and refer to the following code. Below is the code for the MainActivity.java file.

Java




package com.anas.memeshareapp;
  
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
  
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
  
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
  
import org.json.JSONException;
import org.json.JSONObject;
  
public class MainActivity extends AppCompatActivity {
  
    ImageView imgMeme;
    ImageView btnNext;
    ImageView btnShare;
  
    String url ;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        imgMeme = findViewById(R.id.imgMeme);
        btnNext = findViewById(R.id.btnNext);
        btnShare = findViewById(R.id.btnShare);
  
  
        apiCall();
        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
  
                apiCall();
            }
        });
  
        btnShare.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
  
                BitmapDrawable bitmapDrawable = (BitmapDrawable) imgMeme.getDrawable();
                Bitmap bitmap = bitmapDrawable.getBitmap();
  
                String bitmapPath = MediaStore.Images.Media.insertImage(getContentResolver(),bitmap,"Title",null);
                Uri uri = Uri.parse(bitmapPath);
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("image/*");
                intent.putExtra(Intent.EXTRA_STREAM,uri);
                startActivity(Intent.createChooser(intent,"share to :"));
            }
        });
    }
  
    public void apiCall(){
        url = "https://meme-api.com/gimme";
  
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
                (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
  
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
  
                            url = response.getString("url");
                            Glide.with(MainActivity.this).load(url).into(imgMeme);
  
                        }
                        catch (JSONException e){
                            e.printStackTrace();
                        }
  
                    }
                }, new Response.ErrorListener() {
  
                    @Override
                    public void onErrorResponse(VolleyError error) {
  
  
                    }
                });
  
        MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest);
    }
}


Step 6: Make some changes in your gradle file

Add these dependencies to it 

implementation 'com.android.volley:volley:1.2.1'
implementation 'com.github.bumptech.glide:glide:4.15.1'

 

Note: Make sure that your emulator is connected to the internet.

Output:

 



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads