Showing posts with label Android Development. Show all posts
Showing posts with label Android Development. Show all posts
Wednesday, October 14, 2015
SQlite Manager for browsing data in Android
Hello Guys!
Common questions of new Android Developers today is how they can view the data that are stored in their Android App,
So I decided to share two tools that I'm using to browse Sqlite data in my Android App.
1. ADM - Android Device Monitor.
- ADM is a part/feature of Android Studio that can monitor your Device that is currently connected in your machine.
2. Mozilla Firefox with SQLite Manager extension.
- It acts like File Manager of SQlite files.
features:
a. You can execute Query.
b. You can alter Database.
c. Show all stored data.
d. and many more! :)
Here's the steps to extract SQLite: *Note I used Genymotion Emulator as my Device
1. Open your Project in Android Studio, As for me I opened my com.hnh.tourme project
2. Click tools in the upper menu of Android Studio, and then click Android Device Monitor (ADM)
3. Then ADM window will appear. Your current tab must be in the File Explorer, And the go to /data/data/[packagename]/databases/[dbName]
after that click the Sqlite File and click pull file from device Icon.
(As for me my database name is clean_home so my Directory will be /data/data/com.hnh.tourme/databases/clean_home)
4. Open your Mozilla Firefox and Install Sqlite Manager as an extension, after installing open new window for Sqlite Manager and then import the
Sqlite file which is clean_home.sqlite. DONE! :)
Tuesday, September 22, 2015
[ButterKnife] Sum and Diff Simple Android App
Hello Guys!
In Android development, One of the famous open source library is Butterknife. What is ButterKnife? A Library that binds your Android views which uses annotation process. built by Jake Wharton.
- Very light weight.
- Eliminates long codes in finding your Android views.
- It uses annotation such as @Bind, @OnClick and more.
- Clean code and organize.
- Binds String resources.
Personally I always includes this library in most of my projects , I highly recommend you guys to use this, it will improve your speed in production.
you can add this library using Gradle system of Android studio
After syncing your Gradle, you can now use Butterknife in your project.
Here's My Example Android App that can get the Sum or Diff of two numbers.
1.MainActivity.java
2. Layout (activity_main.xml)
Here's the OUTPUT:


You can download the sources code here: ButterknifeSample
for automation of binding views in Butterknife you can use Butterknife zelezny
In Android development, One of the famous open source library is Butterknife. What is ButterKnife? A Library that binds your Android views which uses annotation process. built by Jake Wharton.
- Very light weight.
- Eliminates long codes in finding your Android views.
- It uses annotation such as @Bind, @OnClick and more.
- Clean code and organize.
- Binds String resources.
Personally I always includes this library in most of my projects , I highly recommend you guys to use this, it will improve your speed in production.
you can add this library using Gradle system of Android studio
dependencies { compile 'com.jakewharton:butterknife:7.0.1' }
After syncing your Gradle, you can now use Butterknife in your project.
Here's My Example Android App that can get the Sum or Diff of two numbers.
1.MainActivity.java
package com.example.uge.butterknifesample; import android.support.v7.app.AppCompatActivity; import android.os.Bundle;; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; public class MainActivity extends AppCompatActivity { @Bind(R.id.firstNum) EditText firstNum; @Bind(R.id.secondNum) EditText secondNum; @Bind(R.id.answerText) TextView answerTxt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick(R.id.sumBtn) void getTheSumOfTwoNumbers(){ if(validateEditText()){ int fValue = Integer.parseInt(firstNum.getText().toString()); int sValue = Integer.parseInt(secondNum.getText().toString()); int sumValue = fValue + sValue; answerTxt.setText("Sum: " + sumValue); }else{ Toast.makeText(this, "Please Input the Values in the EditText(s)", Toast.LENGTH_SHORT).show(); } hideKeyboard(); } @OnClick(R.id.diffBtn) void getTheDiffOfTwoNumbers(){ if(validateEditText()){ int fValue = Integer.parseInt(firstNum.getText().toString()); int sValue = Integer.parseInt(secondNum.getText().toString()); int diffValue = fValue - sValue; answerTxt.setText("Diff: " + diffValue); }else{ Toast.makeText(this, "Please Input the Values in the EditText(s)", Toast.LENGTH_SHORT).show(); } hideKeyboard(); } public Boolean validateEditText(){ //The Two EditText must have a value if(firstNum.getText().toString().length() > 0 && secondNum.getText().toString().length() > 0){ return true; }else{ return false; } } public void hideKeyboard(){ InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); if(imm.isAcceptingText()) { // verify if the soft keyboard is open imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } } }
2. Layout (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="15dp" tools:context="com.example.uge.butterknifesample.MainActivity"> <EditText android:id="@+id/firstNum" android:layout_width="match_parent" android:layout_height="45dp" android:inputType="number" android:hint="First Number" /> <EditText android:id="@+id/secondNum" android:layout_width="match_parent" android:layout_height="45dp" android:hint="Second Number" android:inputType="number" android:layout_below="@+id/firstNum" /> <Button android:id="@+id/sumBtn" android:layout_width="match_parent" android:layout_height="45dp" android:text="Sum" android:layout_below="@+id/secondNum" android:layout_margin="5dp"/> <TextView android:id="@+id/orText" android:layout_below="@+id/sumBtn" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="OR" android:layout_margin="5dp"/> <Button android:id="@+id/diffBtn" android:layout_width="match_parent" android:layout_height="45dp" android:text="Difference" android:layout_below="@+id/orText" android:layout_margin="5dp"/> <TextView android:id="@+id/answerText" android:textSize="20sp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"/> </RelativeLayout>
Here's the OUTPUT:



You can download the sources code here: ButterknifeSample
for automation of binding views in Butterknife you can use Butterknife zelezny
Sunday, September 13, 2015
Downloading Bulk Images in Android
Hello Android Geeks,
Recently, I got an Android app project in my current work, Wherein the App needs to download bulk images via Webservices/API,
and the requirement of the process of downloading the assets is must be synchronous.
Here's is the sample code that I made to showcase the Android Library of NOSTRA13
entitle "Android-Universal-Image-Loader". for more info about this visit his GITHUB REPO
1.Download and compile the UIL in the Gradle's dependency
2.Setup your Android Manifest
3. MainActivity
4. Instantiate the Universal Image Loader library in the Application (Singleton)
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.2.0' }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sample.xeugene.imagedownload" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <application android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
package com.sample.xeugene.imagedownload; import android.graphics.Bitmap; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { final static String TAG = "MAIN_ACTIVITY"; ImageLoader imageLoader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageLoader = ImageLoader.getInstance(); new DownloadThisImageFromUrl().execute(); } //Running the method imageloader.loadImagesync() must be // run in the background thread of the App. public class DownloadThisImageFromUrl extends AsyncTask<String, String ,String> { @Override protected String doInBackground(String... strings) { for(String urls : listOfUrls()) { Bitmap image = imageLoader.loadImageSync(urls); Log.d(TAG, "Download Success: " + image); //You can use this var image to save in your SQLite DB :) } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Log.d(TAG, "DOWNLOAD COMPLETE!"); } } //Static list url of the Images //You can add your desired Images here :) public List<String> listOfUrls(){ List<String> listUrl = new ArrayList<>(); listUrl.add("http://dogzone.tcwebsites.netdna-cdn.com/wp-content/uploads/2015/01/Funny-dog-names.jpg"); listUrl.add("http://dreamatico.com/data_images/dog/dog-5.jpg"); listUrl.add("http://static.communitytable.parade.com/wp-content/uploads/2014/02/labrador-america-top-dog-breed-ftr.jpg"); return listUrl; } }
package com.sample.xeugene.imagedownload; import android.app.Application; import android.content.Context; import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; /** * Created by EugeneAllen on 9/22/2015. */ public class App extends Application { @Override public void onCreate() { super.onCreate(); initImageLoader(getApplicationContext()); } public static void initImageLoader(Context context) { DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() .cacheOnDisc(true).cacheInMemory(true) .imageScaleType(ImageScaleType.EXACTLY) .displayer(new FadeInBitmapDisplayer(300)).build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( context) .defaultDisplayImageOptions(defaultOptions) .memoryCache(new WeakMemoryCache()) .discCacheSize(100 * 1024 * 1024).build(); ImageLoader.getInstance().init(config); } }
Using Shared Preferences in Setting Screen
Hi Guys I'm back!
Today, My topic is all about Shared Preferences of Android.
What is Shared Preference?
a class that allows you to save and retrieve persistent key-value pairs of primitive data types(booleans, floats, ints, longs, and strings).
This sample code may give you idea how to use Shared Preference in your Android App Projects.
I used Shared Preference in saving my Settings, The scenario is if the user wants to save his/her setting in the app
for example, turning on/ turning off the Music, Sounds and Updates.
Note: This data will persist across user sessions (even if your application is killed).
Layouts:
Output:

import android.app.Activity; import android.content.SharedPreferences; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Switch; import android.widget.Toast; public class MainActivity extends ActionBarActivity { Switch musicSwitch; Switch soundsSwitch; Switch updatesSwitch; Button saveBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); musicSwitch = (Switch) findViewById (R.id.switch1); soundsSwitch = (Switch) findViewById (R.id.switch2); updatesSwitch = (Switch) findViewById (R.id.switch3); saveBtn = (Button) findViewById (R.id.buttonSave); setWidget(); saveBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { savePreferences(); } }); } private void setWidget(){ //Get the value of SharedPref if null return false SharedPreferences customSharedPreference = getSharedPreferences("mySettings", Activity.MODE_PRIVATE); updatesSwitch.setChecked(customSharedPreference.getBoolean("updates",false)); musicSwitch.setChecked(customSharedPreference.getBoolean("music",false)); soundsSwitch.setChecked(customSharedPreference.getBoolean("sounds",false)); } private void savePreferences(){ SharedPreferences myPref = getSharedPreferences("mySettings", Activity.MODE_PRIVATE); SharedPreferences.Editor editor = myPref.edit(); //Setting the value of SharedPref editor.putBoolean("music", musicSwitch.isChecked()); editor.putBoolean("sounds", soundsSwitch.isChecked()); editor.putBoolean("updates", updatesSwitch.isChecked()); editor.commit(); Toast.makeText(this, "Setting Saved", Toast.LENGTH_SHORT).show(); } }
Layouts:
<RelativeLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" tools:context=".MainActivity" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <Switch android:id="@+id/switch1" android:layout_centerInParent="true" android:layout_height="20dp" android:layout_width="wrap_content" android:text="Music"/> <Switch android:id="@+id/switch2" android:layout_height="20dp" android:layout_width="wrap_content" android:text="Sounds" android:layout_above="@+id/switch3" android:layout_alignLeft="@+id/switch3" android:layout_alignStart="@+id/switch3" android:layout_marginBottom="56dp" /> <Switch android:id="@+id/switch3" android:layout_height="20dp" android:layout_width="wrap_content" android:text="Updates" android:layout_above="@+id/switch1" android:layout_alignLeft="@+id/switch1" android:layout_alignStart="@+id/switch1" android:layout_marginBottom="49dp" /> <Button android:id="@+id/buttonSave" android:layout_height="45dp" android:layout_width="80dp" android:text="SAVE" android:layout_below="@+id/switch1" android:layout_centerHorizontal="true" android:layout_marginTop="58dp" /> </RelativeLayout>
Subscribe to:
Posts (Atom)