Sunday, April 22, 2012

A short and simple explanation about Threads in java

Multi-tasking :  it involves having multiple process (playing music and using text editor) -- Heavy weight

Multi-threading: it involves having mulitple threads(in text editor editing and printing) -- Light Weight

Creating a thread
- Runnable Interface
- Thread Class

- Using Runnable Interface

    Extend Runnable interface and use run method in it.

ex :


class B
{
       PSVM()
     {
          A a_ref= new A();
         a_ref.UseThread();
    }
}





  class A implements Runnable
{

    public void UseThread()
      {
              Thread new_thread = Thread(this, "new thread");
                 new_thread.start();
       }
       private void run()
      {
                // some code
      }
}



- Using Thread Class


  class A extends Thread
{

    public void UseThread()
      {
                 start();
       }
       private void run()
      {
                // some code
      }
}



// its better to implement runnable





Multiple Threads




class B
{
       PSVM()
     {
          A a_ref= new A();
         a_ref.UseThread("one");
             a_ref.UseThread("two");
         a_ref.UseThread("three");

    }
}





  class A implements Runnable
{

    public void UseThread(String threadname)
      {
              Thread new_thread = Thread(this, threadname);
                 new_thread.start();
       }
       private void run()
      {
                // some code
      }
}



using isalive and join methods


// Using join() to wait for threads to finish.
class NewThread implements Runnable {
String name; // name of thread
Thread t;
NewThread(String threadname) {
name = threadname;
t = new Thread(this, name);
System.out.println("New thread: " + t);
t.start(); // Start the thread
}
// This is the entry point for thread.
public void run() {
try {
for(int i = 5; i > 0; i--) {
System.out.println(name + ": " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println(name + " interrupted.");
}
System.out.println(name + " exiting.");
}
}
class DemoJoin {
public static void main(String args[]) {
NewThread ob1 = new NewThread("One");
NewThread ob2 = new NewThread("Two");
NewThread ob3 = new NewThread("Three");
System.out.println("Thread One is alive: "
+ ob1.t.isAlive());
System.out.println("Thread Two is alive: "
+ ob2.t.isAlive());
System.out.println("Thread Three is alive: "
+ ob3.t.isAlive());
// wait for threads to finish
try {
System.out.println("Waiting for threads to finish.");
ob1.t.join();
ob2.t.join();
ob3.t.join();
} catch (InterruptedException e) {
System.out.println("Main thread Interrupted");
}
System.out.println("Thread One is alive: "
+ ob1.t.isAlive());
System.out.println("Thread Two is alive: "
+ ob2.t.isAlive());
System.out.println("Thread Three is alive: "
+ ob3.t.isAlive());
System.out.println("Main thread exiting.");
}
}






Do synchronize with  synchronized keyword or use synchrnoized(object) {  // some code }








Friday, April 20, 2012

Changing Size of SeekBar programatically in android


I had a scienario to change size of seekbar by changing the visibility of surrounding views. Took a while but below is small code snipped which may be helpful for sme1...


RelativeLayout.LayoutParams abc=new RelativeLayout.LayoutParams(526,30);
abc.addRule(RelativeLayout.CENTER_VERTICAL); abc.addRule(RelativeLayout.RIGHT_OF,R.id.pause);
mSeekBar.setLayoutParams(abc);

Friday, March 23, 2012

xml parser

writing a parser to read xml data.

 Below is a simple script for reading data from any xml file. all you need to know is send a xml file and reading output data from a hashmap.





ParserActivity.java


package com.example.parsers;
import java.net.URL;
import java.util.HashMap;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class ParserActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String url_value = "   ";
try {
URL url = new URL(url_value);
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();

HandlerData handler = new HandlerData();
sp.parse(new InputSource(url.openStream()), handler);

getData outdata = handler.getParseddata();
HashMap<String, String> finalhash = new HashMap<String, String>();
finalhash = outdata.gethashdata();

TextView txt = (TextView) findViewById(R.id.text);
txt.setText("abcd");
} catch (Exception e) {
// TODO Auto-generated catch block

}

}
}








HandlerData.java



package com.example.parsers;

import java.util.ArrayList;
import java.util.HashMap;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.util.Log;

class HandlerData extends DefaultHandler {

getData data = new getData();

public getData getParseddata() {
return this.data;
}

HashMap<String, String> outcontent = new HashMap<String, String>();

HashMap<String, Boolean> ischeck = new HashMap<String, Boolean>();
String temp = null;

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String middle_content = new String(ch, start, length);

if (ischeck.get(temp)) {
outcontent.put(temp, middle_content);
ischeck.put(temp, false);
}

}

@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
data.sethashdata(outcontent);
ArrayList<String> keys= new ArrayList<String>(outcontent.keySet());
for(String key : keys)
{
Log.w("outputdata",key+"-"+outcontent.get(key));
}


}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
}

@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
int total_attributes = attributes.getLength();
if (total_attributes > 0) {
while (total_attributes > 0) {
total_attributes--;
String att = "" + attributes.getQName(total_attributes);
String value = attributes.getValue(att);
outcontent.put(att, value);
}
}
ischeck.put(qName, true);
temp = qName;
}

}








getData.java


package com.example.parsers;

import java.util.HashMap;

public class getData {

HashMap<String, String> content = new HashMap<String, String>();

public void sethashdata(HashMap<String, String> input) {
this.content = input;

}

public HashMap<String, String> gethashdata() {
return content;
}
}








Thursday, March 1, 2012

using git

installing : 
sudo apt-get install git

 setting up:
git config --global user.name "prashanthmadi"
git config --global user.email "prashanthrmadi@gmail.com"

 this will generate ~/.gitconfig file

initiallize git :

 you can clone existing git project by using

  •  git clone url
create  a new project by entering into a directory and enter
  • git init


to add files to git use

  •  git add file1 file2


 or else add all of them at once by

 -> git commit -a // this will add all the files at once
 -> git add . // not sure check this command

You are now ready to commit. You can see what is about to be committed using git diff with the --cached option:
$ git diff --cached
(Without --cached, git diff will show you any changes that you've made but not yet added to the index.) You can also get a brief summary of the situation with git status:


ignoring some files

 get into top level of working directory and create file named .gitignore

  foo.txt // to remove any file named as foo.txt
*.html // to remove all files ending with html






creating new branch
  • git branch new_branch_name
to watch all the branches

  • git branch

to switch between branches

  • git checkout branch_name



merge two branches using merge option

  • git merge branch_name   // do this when u are in another branch


two people working on same project

                   A         -----   >            B

Scenario  1:

consider two users as above.  A has a git  and B wants to make changes to it.

  • B will clone the project using clone command
  • B will make required changes and commit them
  • B says A about his changes.
  • A will issue a pull command   as    git pull project_url_of_b
Scenario 2: (defining remote repository)
  • git remote add new_user new_user_url
  • git fetch
this is a bit confusing update this scenario later.....

To get only the changes from previously existing git
  • git pull URL
A general scenario of working with team  happens as we release a public version in some repository. while we still work on current repository and someone else sends you changes

DEV-REPO  ---  >   PUBLIC-REPO
PUBLIC_REPO --- downloaded by another person -- >  DEV2-REPO
after some changes in DEV2-REPO
DEV2-REPO --- > PUBLIC2-REPO
PUBLIC2-REPO --- > DEV-REPO  // merge
  • git push public-repo master // to send into public repositories

Monday, November 7, 2011

close file handler in java while operating on files

I just bumped into one of the error with file io. if you dont close fie handler, it wont write anything into file.
import java.io.*;
class FileWrite 
{
 public static void main(String args[])
  {
  try{
  // Create file 
  FileWriter fstream = new FileWriter("out.txt");
  BufferedWriter out = new BufferedWriter(fstream);
  out.write("Hello Java");
  //Close the output stream
  out.close();
  }catch (Exception e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
  }
  }
}

executing external process using java

Runtime rt=Runtime.getRuntime();
  Process x= rt.exec("ls -l");
  BufferedReader stdInput = new BufferedReader(new 
                InputStreamReader(x.getInputStream()));
  String s;
  while ((s = stdInput.readLine()) != null) {
            System.out.println(s);
        }

Adding new elements to arraylist in java while using iterator

today i had a problem with usage of arraylist along side of iterator. the problem was that i was unable to add elements to the arraylist. it gives you an error java.util.ConcurrentModificationException this is because u cant add elements to an arraylist while using an iterator. so i had used listiterator as below.

import java.util.ArrayList;
import java.util.ListIterator;
public class Test 
{
 public static void main(String args[])
 {
  ArrayList array_test= new ArrayList();
  array_test.add("a");
  array_test.add("k");
  array_test.add("d");
  array_test.add("s");
  array_test.remove("d");
  int i=1;
  for(ListIterator it=array_test.listIterator();it.hasNext();)
  { 
   String link=it.next(); 
   if(i==1)
   {  
    it.add("r");
    it.previous();
    it.add("kk");
    it.previous();
   i++;
   }
   System.out.println(link);
   
  } 
   
  System.out.println("Contents of arrays list "+array_test);
 }
 

}

In the above code i had used it.previous whenever i used it.add. this is because i want to use the added value in the loop again. while the addition of new element in array is added just before next element in arraylist.