My Blog List

Friday 3 May 2013

Consuming Webservices & Parsing JSON Response Tutorial(iOS) :Part 1


Hi Folks ,
Today, I want to make a demonstration of fetching data from web servers by using NSURLConnection on objective-c platform.
What we are going to do?
We are going to create an application that will demonstrate you guys to make a GET  request with NSURLConnection. After that, the retrieved data will be shown in UiTableview .It would be basically my favorite Artist name and his image .
For this tutorial i am going to consume one WCF web service ,thanks to one of my colleague to helping me :-)

API :http://182.72.47.242:49/RpManageCommon/GetArtistPhotos
Retrieved Data would be JSON format shown as below:

{"list":[{"image":"http:\/\/182.72.47.242:49\/images\/dy.png","name":"Dy"},{"image":"http:\/\/182.72.47.242:49\/images\/eminem.png","name":"Eminem"},{"image":"http:\/\/182.72.47.242:49\/images\/enrique.png","name":"Enrique"},{"image":"http:\/\/182.72.47.242:49\/images\/fiftycent.png","name":"Fiftycent"},{"image":"http:\/\/182.72.47.242:49\/images\/pitbull.png","name":"Pitbull"}]}

Now first of all create a new project on Xcode as a single view application. You may use any other of them however the project that I have started with was single view application.
Put UiTableView onto a xib, and make the bindings related to the view controller’s header file.
Open your view controller’s header class. In my example it is called “ViewController.h” and modify it as like as below.

import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
NSMutableData *receivedData;
}
@property (nonatomic, assign) IBOutlet UITableView *myTableView;
-(void)connectWebserviceSync;
@end

What we have done in here, we have created UITableView, and 1 NSMutableData object. One of the most important thing in here is that our view controller has implemented NSURLConnectionDataDelegate. Whenever our connection object start to fetching from a web page, if the delegate of our connection object is set to this view controller, it will call delegate methods to warn our view controller about the state of connection. Now let’s make some coding over view controller’s .m file.
First of all, I would like to implement the connectWebServiceSync method. Whenever  application will enter in ViewWillAppear Mode  it will call connectWebServiceSync method.
connectWebServiceSync  simply create NSURLConnection request and execute it.
Modify your .m as shown below


-(void)viewWillAppear:(BOOL)animated
{
//call webservice here
[self connectWebserviceSync];
}

-(void)connectWebserviceSync
{
// Create the request.
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://182.72.47.242:49/RpManageCommon/GetArtistPhotos"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
// Create the NSMutableData to hold the received data.
// receivedData is an instance variable declared elsewhere.
receivedData = [[NSMutableData data] retain];
} else {
// Inform the user that the connection failed.
NSLog(@"connection failed");
}
}



Here I create url, and afterwards a request with respect to instance of url. These are the same procedures for every requests
The tricky part , the delegation, comes into play at this time. The folks at Apple has created a simple way to deal with the states of connection by using delegation structure.There are actually lots of delegate methods in NSURLConnectionDataDelegate however, just only 3 of them is required to be implemented in class. Those are;
this method might be calling more than one times according to incoming data size

*/
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[receivedData appendData:data];
}
/*
if there is an error occured, this method will be called by connection
*/
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

NSLog(@"%@" , error);
}

/*
if data is successfully received, this method will be called by connection
*/
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
 NSString *responseString = [[[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding] autorelease];   NSLog(@"Succeeded! Received JSON String %@ ",responseString);
// release the connection, and the data object
    [connection release];
[receivedData release];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data this method is called more than ones if the data returned by server is huge. NSURLConnection is clever enough how to split and whenever it gets any kind of data it calls this method from bound delegate class.
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error this method is called if something is abnormally going on during the connection.
-(void)connectionDidFinishLoading:(NSURLConnection *)connection this method is called when connection finishes its job successfully. All the actions after fetching data from server can be done here. In our example, we have filled our data into our object “receivedData”. Now that, we can  convert our data into string with UTF8 encoding, and then can store it somewhere or Log it.
For this tutorial i just used NSLog to print json response.If you are implementing above code hit run and look into your console for output.



What to do next?
We have Raw JSON string as a response.now we have to parse that raw JSON response and populate data over UITableView view
to be continued.....

Tuesday 9 October 2012

PayPal Integration ,Azure Cloud Storage Accees

Upcoming blogs


1   PayPal Integration (  iPhone/Android)
2.  Azure blob storage access api integration in Iphone
soon....




Friday 5 October 2012

Accessing Settings in Android

Hi folks,
Another post related to android settings.Sometime you need to access underlying phone settings ,for example suppose your android device is not connected to wireless network,it would be very useful to the user if you provide option where user can directly check his/her network connectivity without quitting existing application.below is the example of Skype android application




So here is the solution through which you can acces  Each and every settings in android
Android ships with no of Constants  in android.provider.Settings class.
for constants description take a look on  http://developer.android.com/reference/android/provider/Settings.html.


Step 1. initialize intent with one of settings action
      Intent i=new Intent(Settings.ACTION_WIRELESS_SETTINGS);

Step 2. start Activity with above intent
        startActivity(i);


or  simply
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));

That's all 
like wise you can use each and every settings action 

Thank you



Thursday 27 September 2012

Posting JSON data to WCF REST from iPhone app

Hi,fellas
this is quick post related to posting JSON data to WCF REST web service from iphone or ipad application.


look at the code below








1. Construct your JSON NSString as



     NSString *jsonRequest=@"{\"user\":{\"EmailId\":\"bpsingh216@gmail.com\",\"Password\":\"pass\",\"UserRoleId\":2,\"UserDetails\":{\"FirstName\":\"bp\",\"FamilyName\":\"Singh\",\"CountryId\":1,\"StateId\":1,\"CityId\":2,\"ZipCode\":221712}}}";


2.Construct your url using NSURL
3.Create NSMutableURLRequest with url
4.Create NSData using jsonRequest.
4.set request method i.e. POST or GET
5.set value for Accept and Content-Type
6. set NSData as HTTPBody
7. Execute your request

Tuesday 25 September 2012

Light Design Tool out now

Hi, folks
It gives me immense pleasure to introduce new Light Design Tool android application which was the part of  Responsive Urban Lighting Research Program at Allborg University ,Denmark

Application user can design light behavior with this application and can schedule his/her design for specific date and lampost which are connected to the app will automatically appears in that way.It was my first freelance projet.Hit the below link for Application live functionality
https://dl.dropbox.com/u/2700192/Gl%20torv%202.mov





i will share some code for the same ..........

Friday 24 August 2012

Image Reflection in android

Hi,fellas
Working on my one of android project i got stuck on how to get image reflection on android
after messing a lot i successfully created image reflection with a little bit complicated android coding stuff. so as usual m goona describe how  to achieve this
Here we go..

1.Start fresh project name it  as ImageReflectionDemo
2.Create xml file

<?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" >

    <ImageView
        android:id="@+id/bpsingh"
        android:layout_width="127dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.21"
        
        android:src="@drawable/rihanna" />

</LinearLayout>

I just took one imageview with drawable image name bpsingh

3.Modify your Activity as


package com.parallelminds.appstore;

import android.app.Activity;

import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader.TileMode;
import android.os.Bundle;
import android.widget.ImageView;
public class ImageReflection extends Activity{
ImageView imageview;

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.imagereflectiondemo); 
        
        //The gap we want between the reflection and the original image
        final int reflectionGap = 4;
        
        //Get you bit map from drawable folder
        Bitmap originalImage = BitmapFactory.decodeResource(getResources(), 
                R.drawable.bpsingh);
        
        int width = originalImage.getWidth();
        int height = originalImage.getHeight();
        
       
        //This will not scale but will flip on the Y axis
        Matrix matrix = new Matrix();
        matrix.preScale(1, -1);
        
        //Create a Bitmap with the flip matix applied to it.
        //We only want the bottom half of the image
        Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height/2, width, height/2, matrix, false);
        
            
        //Create a new bitmap with same width but taller to fit reflection
        Bitmap bitmapWithReflection = Bitmap.createBitmap(width 
          , (height + height/2), Config.ARGB_8888);
      
       //Create a new Canvas with the bitmap that's big enough for
       //the image plus gap plus reflection
       Canvas canvas = new Canvas(bitmapWithReflection);
       //Draw in the original image
       canvas.drawBitmap(originalImage, 0, 0, null);
       //Draw in the gap
       Paint deafaultPaint = new Paint();
       canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint);
       //Draw in the reflection
       canvas.drawBitmap(reflectionImage,0, height + reflectionGap, null);
       
       //Create a shader that is a linear gradient that covers the reflection
       Paint paint = new Paint(); 
       LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, 
         bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, 
         TileMode.CLAMP); 
       //Set the paint to use this shader (linear gradient)
       paint.setShader(shader); 
       //Set the Transfer mode to be porter duff and destination in
      // paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); 
       
       //Draw a rectangle using the paint with our linear gradient
       canvas.drawRect(0, height, width, 
         bitmapWithReflection.getHeight() + reflectionGap, paint); 
       
       //Create an Image view and add our bitmap with reflection to it
       imageview=(ImageView) findViewById(R.id.rihana);
      // ImageView imageView = new ImageView(this);
       imageview.setImageBitmap(bitmapWithReflection);
}
}
       
4. Now run your project and you can see out put as


that's all
enjoy coding









Wednesday 22 August 2012

Face Detection in Android




Hi, fellas
Today i am gonna show you how you can detect face in given bitmap .Android Provides some classes and its associate constructor and method through which you can easily detect a face even eye position in given bitmap .So first take a look on below class description from http://developer.android.com/reference/android/media/FaceDetector.html#FaceDetector(int, int, int)


1.FaceDetector

extends Object
java.lang.Object
   ↳android.media.FaceDetector

Class Overview


Identifies the faces of people in a Bitmap graphic object.


2.

Public Constructors


public FaceDetector (int width, int height, int maxFaces)

Since: API Level 1
Creates a FaceDetector, configured with the size of the images to be analysed and the maximum number of faces that can be detected. These parameters cannot be changed once the object is constructed. Note that the width of the image must be even.
Parameters
widththe width of the image
heightthe height of the image
maxFacesthe maximum number of faces to identify
3.

Public Methods


public int findFaces (Bitmap bitmap, Face[] faces)

Since: API Level 1
Finds all the faces found in a given Bitmap. The supplied array is populated with FaceDetector.Faces for each face found. The bitmap must be in 565 format (for now).
Parameters
bitmapthe Bitmap graphic to be analyzed
facesan array in which to place all found FaceDetector.Faces. The array must be sized equal to the maxFaces value set at initialization
Returns
  • the number of faces found
Here we go....
1.Create your Project ,name it as FaceDetectionDemo
2.Create FaceDetectionActivity
In your onCreate method write setContentView(new MyView(this)); after call to super.
public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
       setContentView(new MyView(this));
}
3.So next step is to create MyView class

private class MyView extends View
    {
    private Bitmap myBitmap;
    private int width, height;
    private FaceDetector.Face[] detectedFaces;
    private int NUMBER_OF_FACES=2;
    private FaceDetector faceDetector;
    private int NUMBER_OF_FACE_DETECTED;
    private float eyeDistance;
    
public MyView(Context context) 
{
super(context);
BitmapFactory.Options bitmapFatoryOptions=new BitmapFactory.Options();
bitmapFatoryOptions.inPreferredConfig=Bitmap.Config.RGB_565;
myBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.fourface,bitmapFatoryOptions);
width=myBitmap.getWidth();
height=myBitmap.getHeight();
detectedFaces=new FaceDetector.Face[NUMBER_OF_FACES];
faceDetector=new FaceDetector(width,height,NUMBER_OF_FACES);
NUMBER_OF_FACE_DETECTED=faceDetector.findFaces(myBitmap, detectedFaces);
}
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawBitmap(myBitmap, 0,0, null);
Paint myPaint = new Paint();
            myPaint.setColor(Color.GREEN);
            myPaint.setStyle(Paint.Style.STROKE); 
            myPaint.setStrokeWidth(3);

            for(int count=0;count<NUMBER_OF_FACE_DETECTED;count++)
            {
            Face face=detectedFaces[count];
            PointF midPoint=new PointF();
            face.getMidPoint(midPoint);
            
            eyeDistance=face.eyesDistance();
            canvas.drawRect(midPoint.x-eyeDistance, midPoint.y-eyeDistance, midPoint.x+eyeDistance, midPoint.y+eyeDistance, myPaint);
            }
}
    
    }
Let me Explain the Constructor


  • For FaceDetection we need to convert in bitmap format that too in RGB_565.
  • Now get the image from the drawable folder. Get the width and height of image.
  • Now the reason I feel this API the simplest is coming now.
  • You need to pass the number of faces you want to detect.It will return the array of Face type.Last three lines is having logic for that.So you must declare an array with the size of number of faces you want to detect.
Now when the face gets detected we will draw a red rectangle on it.For that we need to write few lines in our onDraw method.
  • drawRect is taking five parameter left x,y and top x,y coordinate.From that given pint it will start drawing rectangle.We need to pass paint object also.



That's all run your project and it will detect faces and drawRect on given bitmap
enjoy!
for more query plz mail me @bpsingh216@gmail.com