Monday 2 July 2018

Awesome React Native: Building Android App with JavaScript


Building mobile applications using JavaScript is in trend these days. Frameworks like Ionic, PhoneGap and Sencha Touch provide the ability to develop apps using basic knowledge of HTML, CSS and JavaScript. With these frameworks, you have the ability to make calls to native APIs, but the bulk of your app will be HTML and JavaScript inside a WebView. React, Facebook’s JavaScript library has proved tremendously successful around the web, including large companies like Netflix and Airbnb.
React Native is a JavaScript framework for writing real, natively rendering iOS and Android applications. Instead of running React in the browser and rendering to divs and spans, React Native run it in an embedded instance of JavaScriptCore inside app and render to higher-level platform-specific components.

react-native-architecture

In this tutorial, we’ll build an android movie app Motion using public api provided by themoviedb with React Native. You can find list of movies currently playing in theaters.

1. Creating A Blank React Native Project

Make sure you have Node installed in your system. You can follow this guide to install Node. Now, from the terminal run npm install -g react-native-cli. This will install React Native globally on your system. You can also follow the official guide to get started.
Navigate to the folder in your system where you would like to set up the project. Once there, from the terminal run react-native init Motion. This should fetch and install the required modules and create a new folder called Motion.

motion-react-native-app-folder




React Native provides ability to write both Android and iOS applications together with a majority of JavaScript code shared between them. Inside the newly created folder Motion you will find two .js files: index.android.js and index.ios.js. If you’re building an iOS app you’ll work with index.ios.js; with index.android.js for an Android app; and both for, you know, both platforms.
We’re building an android app so we can remove the index.ios.js and ios folder. We’ll be working with index.android.js file. This is the file that is first executed when the app launches.
Connect your usb-debugging enabled android device to your system and from the terminal run react-native run-android. It will start the blank app in your device.

motion-react-native-app-blank

2. Getting the data from themoviedb API

You need to get an api key from themoviedb first to access the api. Once we acquire the API key we’re good to go. This is how your Motion class looks like initially:
class Motion extends Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          Welcome to React Native!
        </Text>
        <Text style={styles.instructions}>
          To get started, edit index.android.js
        </Text>
        <Text style={styles.instructions}>
          Shake or press menu button for dev menu
        </Text>
      </View>
    );
  }
}

We need to add a constructor inside the Motion class. Inside the constructor we will initialize our state variables. At this point we need one state variable – moviesData. moviesData array is going to store all the JSON data fetched from the API.
constructor(props) {
    super(props);

    var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
    this.state = {
      moviesData: ds.cloneWithRows([]),
    };
  }

Next, we will define a fetchMoviesData method, which will fetch the movies JSON from API. Add the following lines of code below the constructor code:
fetchMoviesData() {
    var url = 'http://api.themoviedb.org/3/movie/now_playing?api_key=YOUR_API_KEY';
    fetch(url)
      .then( response => response.json() )
      .then( jsonData => {
        this.setState({
          moviesData: this.state.moviesData.cloneWithRows(jsonData.results),
        });
      })
    .catch( error => console.log('Error fetching: ' + error) );
  }

Next, we need to add the componentDidMount method. componentDidMount is a lifecycle method which is fired immediately after the first rendering occurs.

react-lifecycle
Let’s declare componentDidMount method and call the fetchMoviesData function inside it.
componentDidMount() {
    this.fetchMoviesData();
  }

3. Creating the view

We need to import some components which will be used in creating the view.
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  ListView,
  Image
} from 'react-native';

ListView is a core component designed for efficient display of vertically scrolling lists of changing data. Image component is used for displaying different types of images, including network images, static resources, temporary local images, and images from local disk, such as the camera roll.
Now, get rid of everything from inside Motion class’s render method and add these lines of code:
render() {
    return (
      <ListView
        dataSource={this.state.moviesData}
        renderRow={this.renderRow}
        style={styles.container}
      />
    );
  }
ListView’s renderRow prop expects a template which needs to be rendered for each row. Add the following renderRow function inside the Motion class:
renderRow(rowData){
    return (
      <View style={styles.thumb}>
        <Image
          source={{uri:'https://image.tmdb.org/t/p/w500_and_h281_bestv2/'+rowData.poster_path}}
          resizeMode='cover'
          style={styles.img} />
          <Text style={styles.txt}>{rowData.title} (Rating: {Math.round( rowData.vote_average * 10 ) / 10})</Text>
      </View>
    );
  }
We need to do one more thing before we can see the results. You can find the line that says var styles = StyleSheet.create({ at the bottom. These styles are responsible for displaying the initial default screen. We can update these to show our movie listing in thumbnail list:
const styles = StyleSheet.create({
  container: {
    backgroundColor: '#f2f2f2',
  },
  thumb: {
    backgroundColor: '#ffffff',
    marginBottom: 5,
    elevation: 1
  },
  img: {
    height: 300
  },
  txt: {
    margin: 10,
    fontSize: 16,
    textAlign: 'left'
  },
});

Your app with latest movie listing is complete. You can open the terminal run react-native run-android to see your app. You can find the code for this app here. Enjoy!


PS: This is the simple demo of the app. You can use pagination of the themoviedb API and build fully functional App. You can also implement the movie detail page using the React Native Navigator.
Hire React Native Developers
About Codebrahma:
Codebrahma is a React JS development services company who are expert in developing React applications. Being an iOS app development companywe have created iOS applications with stunning UI both using React Native and native frameworks.

13 comments:

  1. Thank you for sharing this information, You have done a great job. Very helpful blog for people who wants to know about React Native App Development Services .

    ReplyDelete
  2. Great Content!! It is very helpful for the people who are looking Top Apps Development Companies In UK

    ReplyDelete
  3. Nice it seems to be good post... It will get readers engagement on the article since readers engagement plays an vital role in every blog.. i am expecting more updated posts from your hands.
    Web Data Mining Solutions India

    ReplyDelete
  4. Thanks for sharing this post . It is very useful for the react native app development company . Thanks for this post .

    ReplyDelete
  5. I just want to say I’m new to weblog and certainly savored this page. You actually have outstanding well written articles. Cheers for sharing with us your website.
    Mobile App Development Company in Dubai
    Android App Development Company in Dubai
    Mobile App Development Company
    Mobile App Development Company in UAE

    ReplyDelete
  6. React Native is a framework for cross-platform mobile app development for iOS and Android. This framework depends on React ideas and, in this way, permits making solid mobile applications. React Native Mobile App Development is viewed as less effective and beneficial. HireFullStackDeveloperIndia React Native Mobile App Development Services have helped clients reach their business objectives on both Android and iOS platforms.

    Consult today to Hire React Native Developers!

    See Also: Flutter App Development Companies

    ReplyDelete
  7. Do you know where to find the best shopify bot? If no then visit tas.co.in. They are known to provide the best shopify bots.

    concert ticket bots

    ReplyDelete
  8. This information and knowledge you have shared is really inspiring and makes me consider hiring Mobile Application Development to help me grow my business. However, the details you mention here would be very much helpful for the beginner. Here is yet another top-notch service provider “X-Byte Enterprise Solutions” who render feasible and credible solutions to global clients that help global brands design and build superior digital products, enabling seamless user experiences across all modern platforms and devices.

    Know more here: Mobile App Development

    ReplyDelete
  9. Finding best react developers? Hire Dedicated React Developers (HERE)

    ReplyDelete

What are the Benefits of using React Js?

ReactJS platform is an amazing JavaScript framework that helps to make the development process easier. It opens new ways and severa...