You are currently viewing How to create android wikipedia app

How to create android wikipedia app

This Android Program shows you Wikipedia Application.
Below is the source code of the Program to shows you Wikipedia Application. The program i
s successfully run.
 

 1)MainActivity.java(change your package name)

package com.android.wikipedia;

import android.os.AsyncTask;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class MainActivity extends AppCompatActivity
{
    private Button btnFetchData;
    private TextView txtWikiData;
    private ProgressBar progressBar;
    private EditText etxSearch;
    
    // Http Request Methods
    // http://www.restapitutorial.com/lessons/httpmethods.html
    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        progressBar = (ProgressBar) findViewById(R.id.progressbar);
        etxSearch = (EditText) findViewById(R.id.etxSearch);
        txtWikiData = (TextView) findViewById(R.id.txtWikiData);
        
        btnFetchData = (Button) findViewById(R.id.btnFetchData);
        btnFetchData.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                String keyword = etxSearch.getText().toString();
                
                String WIKIPEDIA_URL = “https://en.wikipedia.org/w/api.php?action=query&titles=” +
                        keyword +
                        “&prop=revisions&rvprop=content&format=json&prop=extracts”;
                
                // Start AsyncTask
                FetchWikiDataAsync fetchWikiDataAsync = new FetchWikiDataAsync();
                fetchWikiDataAsync.execute(WIKIPEDIA_URL);
            }
        });
    }
    
    private class FetchWikiDataAsync extends AsyncTask<String, Void, String>
    {
        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
            progressBar.setVisibility(View.VISIBLE);
            Toast.makeText(MainActivity.this, “Fetching Data. Please wait.”, Toast.LENGTH_SHORT).show();
        }
    
        @Override
        protected String doInBackground(String[] params)
        {
            try
            {
                String sURL = params[0];
    
                URL url = new URL(sURL);        // Convert String URL to java.net.URL
                // Connection: to Wikipedia API
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod(“GET”);
                urlConnection.connect();
                
                InputStream inputStream = urlConnection.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream,                  “UTF-8”);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                
                StringBuilder stringBuilder = new StringBuilder();
                String line;
                
                while ((line = bufferedReader.readLine()) != null)
                {
                    stringBuilder.append(line);
                }
                
                String wikiData = stringBuilder.toString();
                
                // Parse JSON Data
                String formattedData = parseJSONData(wikiData);
                
                return formattedData;
                
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            
            return null;
        }
    
        @Override
        protected void onPostExecute(String formattedData)
        {
            super.onPostExecute(formattedData);
            progressBar.setVisibility(View.GONE);
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
            {
                // HTML Data
                txtWikiData.setText(Html.fromHtml
                (formattedData,Html.FROM_HTML_MODE_LEGACY));
            }
            else
            {
                  // HTML Data
                txtWikiData.setText(Html.fromHtml(formattedData));
            }
        }
    }
    
    private String parseJSONData(String wikiData)
    {
        try
        {
            // Convert String JSON (wikiData) to JSON Object
            JSONObject rootJSON = new JSONObject(wikiData);
            JSONObject query = rootJSON.getJSONObject(“query”);
            JSONObject pages = query.getJSONObject(“pages”);
            JSONObject number = pages.getJSONObject(pages.keys().next());
            String formattedData = number.getString(“extract”);
            
            return formattedData;
        }
        catch (JSONException json)
        {
            json.printStackTrace();
        }
        
        return null;
    }
    
}


2)activity_main.xml   

 
<?xml version=”1.0″ encoding=”utf-8″?>
<RelativeLayout
    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:id=”@+id/activity_main”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    android:padding=”10dp”
    tools:context=”com.android.wikipedia.MainActivity”>
 
    <EditText
        android:id=”@+id/etxSearch”
        android:layout_width=”match_parent”
        android:layout_height=”wrap_content”
        android:hint=”Search Wikipedia”/>
 
    <Button
        android:id=”@+id/btnFetchData”
        android:layout_width=”match_parent”
        android:layout_height=”wrap_content”
        android:layout_below=”@id/etxSearch”
        android:text=”Fetch Wikipedia Data”
        android:textColor=”@android:color/white”
        android:textAllCaps=”false”
        android:backgroundTint=”@color/colorPrimary”/>
 
    <ScrollView
        android:layout_width=”match_parent”
        android:layout_height=”match_parent”
        android:layout_below=”@id/btnFetchData”>
 
        <TextView
            android:id=”@+id/txtWikiData”
            android:layout_width=”match_parent”
            android:layout_height=”wrap_content”
            android:text=”Wikipedia JSON Data”
            android:textSize=”20sp”
            android:textColor=”@android:color/black”/>
 
    </ScrollView>
 
    <ProgressBar
        android:id=”@+id/progressbar”
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_centerInParent=”true”
        android:visibility=”gone”/>
 
</RelativeLayout>
 
3)AndroidManifest.xml 
 
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
 package=”com.android.wikipedia“>
 
    <uses-permission android:name=”android.permission.INTERNET”/>
 
    <application
        android:allowBackup=”true”
        android:icon=”@mipmap/ic_launcher”
        android:label=”@string/app_name”
        android:roundIcon=”@mipmap/ic_launcher_round”
        android:supportsRtl=”true”
        android:theme=”@style/AppTheme”>
        <activity android:name=”.MainActivity”>
            <intent-filter>
                <action android:name=”android.intent.action.MAIN”/>
 
                <category android:name=”android.intent.category.LAUNCHER”/>
            </intent-filter>
        </activity>
    </application>
 
</manifest>
 
  
4)Output
 

Note:-Just copy and paste code into your IDE/Android Studio.Change package name.
 
 







This Post Has 2 Comments

  1. Rituraj Saha

    You saved my day thank you.. It was awesome..

    1. Rajesh Shirke

      I am very happy that your problem has been solved and thank you for visiting our blog.

Leave a Reply