Mostrando entradas con la etiqueta android. Mostrar todas las entradas
Mostrando entradas con la etiqueta android. Mostrar todas las entradas

lunes, 24 de febrero de 2014

Upload File to server

via http://androidexample.com/Upload_File_To_Server_-_Android_Example/index.php?view=article_discription&aid=83&aaid=106

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
  
public class UploadToServer extends Activity {
     
    TextView messageText;
    Button uploadButton;
    int serverResponseCode = 0;
    ProgressDialog dialog = null;
        
    String upLoadServerUri = null;
     
    /**********  File Path *************/
    final String uploadFilePath = "/mnt/sdcard/";
    final String uploadFileName = "service_lifecycle.png";
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
         
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload_to_server);
          
        uploadButton = (Button)findViewById(R.id.uploadButton);
        messageText  = (TextView)findViewById(R.id.messageText);
         
        messageText.setText("Uploading file path :- '/mnt/sdcard/"+uploadFileName+"'");
         
        /************* Php script path ****************/
        upLoadServerUri = "http://www.androidexample.com/media/UploadToServer.php";
         
        uploadButton.setOnClickListener(new OnClickListener() {            
            @Override
            public void onClick(View v) {
                 
                dialog = ProgressDialog.show(UploadToServer.this, "", "Uploading file...", true);
                 
                new Thread(new Runnable() {
                        public void run() {
                             runOnUiThread(new Runnable() {
                                    public void run() {
                                        messageText.setText("uploading started.....");
                                    }
                                });                      
                           
                             uploadFile(uploadFilePath + "" + uploadFileName);
                                                      
                        }
                      }).start();        
                }
            });
    }
      
    public int uploadFile(String sourceFileUri) {
           
           
          String fileName = sourceFileUri;
  
          HttpURLConnection conn = null;
          DataOutputStream dos = null;  
          String lineEnd = "\r\n";
          String twoHyphens = "--";
          String boundary = "*****";
          int bytesRead, bytesAvailable, bufferSize;
          byte[] buffer;
          int maxBufferSize = 1 * 1024 * 1024; 
          File sourceFile = new File(sourceFileUri); 
           
          if (!sourceFile.isFile()) {
               
               dialog.dismiss(); 
                
               Log.e("uploadFile", "Source File not exist :"
                                   +uploadFilePath + "" + uploadFileName);
                
               runOnUiThread(new Runnable() {
                   public void run() {
                       messageText.setText("Source File not exist :"
                               +uploadFilePath + "" + uploadFileName);
                   }
               }); 
                
               return 0;
            
          }
          else
          {
               try { 
                    
                     // open a URL connection to the Servlet
                   FileInputStream fileInputStream = new FileInputStream(sourceFile);
                   URL url = new URL(upLoadServerUri);
                    
                   // Open a HTTP  connection to  the URL
                   conn = (HttpURLConnection) url.openConnection(); 
                   conn.setDoInput(true); // Allow Inputs
                   conn.setDoOutput(true); // Allow Outputs
                   conn.setUseCaches(false); // Don't use a Cached Copy
                   conn.setRequestMethod("POST");
                   conn.setRequestProperty("Connection", "Keep-Alive");
                   conn.setRequestProperty("ENCTYPE", "multipart/form-data");
                   conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                   conn.setRequestProperty("uploaded_file", fileName); 
                    
                   dos = new DataOutputStream(conn.getOutputStream());
          
                   dos.writeBytes(twoHyphens + boundary + lineEnd); 
                   dos.writeBytes("Content-Disposition: form-data; name="uploaded_file";filename=""
                                             + fileName + """ + lineEnd);
                    
                   dos.writeBytes(lineEnd);
          
                   // create a buffer of  maximum size
                   bytesAvailable = fileInputStream.available(); 
          
                   bufferSize = Math.min(bytesAvailable, maxBufferSize);
                   buffer = new byte[bufferSize];
          
                   // read file and write it into form...
                   bytesRead = fileInputStream.read(buffer, 0, bufferSize);  
                      
                   while (bytesRead > 0) {
                        
                     dos.write(buffer, 0, bufferSize);
                     bytesAvailable = fileInputStream.available();
                     bufferSize = Math.min(bytesAvailable, maxBufferSize);
                     bytesRead = fileInputStream.read(buffer, 0, bufferSize);   
                      
                    }
          
                   // send multipart form data necesssary after file data...
                   dos.writeBytes(lineEnd);
                   dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
          
                   // Responses from the server (code and message)
                   serverResponseCode = conn.getResponseCode();
                   String serverResponseMessage = conn.getResponseMessage();
                     
                   Log.i("uploadFile", "HTTP Response is : "
                           + serverResponseMessage + ": " + serverResponseCode);
                    
                   if(serverResponseCode == 200){
                        
                       runOnUiThread(new Runnable() {
                            public void run() {
                                 
                                String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
                                              +" http://www.androidexample.com/media/uploads/"
                                              +uploadFileName;
                                 
                                messageText.setText(msg);
                                Toast.makeText(UploadToServer.this, "File Upload Complete.", 
                                             Toast.LENGTH_SHORT).show();
                            }
                        });                
                   }    
                    
                   //close the streams //
                   fileInputStream.close();
                   dos.flush();
                   dos.close();
                     
              } catch (MalformedURLException ex) {
                   
                  dialog.dismiss();  
                  ex.printStackTrace();
                   
                  runOnUiThread(new Runnable() {
                      public void run() {
                          messageText.setText("MalformedURLException Exception : check script url.");
                          Toast.makeText(UploadToServer.this, "MalformedURLException", 
                                                              Toast.LENGTH_SHORT).show();
                      }
                  });
                   
                  Log.e("Upload file to server", "error: " + ex.getMessage(), ex);  
              } catch (Exception e) {
                   
                  dialog.dismiss();  
                  e.printStackTrace();
                   
                  runOnUiThread(new Runnable() {
                      public void run() {
                          messageText.setText("Got Exception : see logcat ");
                          Toast.makeText(UploadToServer.this, "Got Exception : see logcat ", 
                                  Toast.LENGTH_SHORT).show();
                      }
                  });
                  Log.e("Upload file to server Exception", "Exception : "
                                                   + e.getMessage(), e);  
              }
              dialog.dismiss();       
              return serverResponseCode; 
               
           } // End else block 
         } 
}


via http://androidexample.com/Upload_File_To_Server_-_Android_Example/index.php?view=article_discription&aid=83&aaid=106

jueves, 30 de enero de 2014

change up and moreover actionbar icon style

in values/styles.xml:

Adding % in strings.xml

just add formatted="false" in the entry:
Please the field %s, in %s, should have a value!

Get connectivity in android

Common solution:
ConnectivityManager cm =
        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
 
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
                      activeNetwork.isConnectedOrConnecting();

Using a broadcast receiver when the network state change:

   
      
   


Post data in body part

try {
  URL url = new URL("http://requestb.in/14a9s7m1");
     HttpURLConnection conn;
      conn = (HttpURLConnection) url.openConnection();
     conn.setRequestMethod("POST");
     
      conn.setDoOutput(true);
     
  
     OutputStream os = null;
     try {
      os = conn.getOutputStream();
      os.write("fkdlsakl!".getBytes());
   } catch (Exception e) {
      e.printStackTrace();
     }   
     os.close();
     
     conn.connect();
      int respCode = conn.getResponseCode();
  
      if(respCode == 200) {
       InputStream ip = conn.getInputStream();
//       response.headers = conn.getHeaderFields();
       int s = ip.read();
       ip.close();
      }
  } catch (Exception e) {}

jueves, 31 de octubre de 2013

Adjust image size to avoid memory issues with images so big

this is the code for decoding images inside a rectangle:


        private int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
     // Raw height and width of image
     final int height = options.outHeight;
     final int width = options.outWidth;
     int inSampleSize = 1;
 
     if (height > reqHeight || width > reqWidth) {
 
         // Calculate ratios of height and width to requested height and width
         final int heightRatio = Math.round((float) height / (float) reqHeight);
         final int widthRatio = Math.round((float) width / (float) reqWidth);
 
         // Choose the smallest ratio as inSampleSize value, this will guarantee
         // a final image with both dimensions larger than or equal to the
         // requested height and width.
         inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
     }
 
     return inSampleSize;
 }
 
 private Bitmap decodeBitmapFromResource(byte[] data,
         int reqWidth, int reqHeight) {

     // First decode with inJustDecodeBounds=true to check dimensions
     final BitmapFactory.Options options = new BitmapFactory.Options();
     options.inJustDecodeBounds = true;
     
     BitmapFactory.decodeByteArray(data, 0, data.length,options);

     // Calculate inSampleSize
     options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
     

     // Decode bitmap with inSampleSize set
     options.inJustDecodeBounds = false;
     
     return BitmapFactory.decodeByteArray(data, 0, data.length,options);
     
 }


Then you can use it in this way:


byte[] data = getImageFromUrl(url);
    
if(data!=null){
    bitmap = decodeBitmapFromResource(data, image_size, image_size);
}

Horizontal View Swipe Eclipse Example

via: http://just-another-blog.net/

The Goal is to implement horizontal View swiping with Tabs in Android like the Google Play Store.
HorizontalViewSwiping
I used the default code from Eclipse.
public class MainActivity extends FragmentActivity {

 /**
  * The {@link android.support.v4.view.PagerAdapter} that will provide
  * fragments for each of the sections. We use a
  * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
  * will keep every loaded fragment in memory. If this becomes too memory
  * intensive, it may be best to switch to a
  * {@link android.support.v4.app.FragmentStatePagerAdapter}.
  */
 SectionsPagerAdapter mSectionsPagerAdapter;

 /**
  * The {@link ViewPager} that will host the section contents.
  */
 ViewPager mViewPager;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  // Create the adapter that will return a fragment for each of the three
  // primary sections of the app.
  mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

  // Set up the ViewPager with the sections adapter.
  mViewPager = (ViewPager) findViewById(R.id.pager);
  mViewPager.setAdapter(mSectionsPagerAdapter);

 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

 /**
  * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
  * one of the sections/tabs/pages.
  */
 public class SectionsPagerAdapter extends FragmentPagerAdapter {

  public SectionsPagerAdapter(FragmentManager fm) {
   super(fm);
  }

  @Override
  public Fragment getItem(int position) {
   // getItem is called to instantiate the fragment for the given page.
   // Return a DummySectionFragment (defined as a static inner class
   // below) with the page number as its lone argument.
   Fragment fragment = new DummySectionFragment();
   Bundle args = new Bundle();
   args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
   fragment.setArguments(args);
   return fragment;
  }

  @Override
  public int getCount() {
   // Show 3 total pages.
   return 3;
  }

  @Override
  public CharSequence getPageTitle(int position) {
   Locale l = Locale.getDefault();
   switch (position) {
   case 0:
    return getString(R.string.title_section1).toUpperCase(l);
   case 1:
    return getString(R.string.title_section2).toUpperCase(l);
   case 2:
    return getString(R.string.title_section3).toUpperCase(l);
   }
   return null;
  }
 }

 /**
  * A dummy fragment representing a section of the app, but that simply
  * displays dummy text.
  */
 public static class DummySectionFragment extends Fragment {
  /**
   * The fragment argument representing the section number for this
   * fragment.
   */
  public static final String ARG_SECTION_NUMBER = "section_number";

  public DummySectionFragment() {
  }

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
   View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false);
   TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label);
   dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));
   return rootView;
  }
 }

}

The Layout XML for the MainActivity:
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<!--
This title strip will display the currently visible page title, as well as the page
titles for adjacent pages.
-->

<android.support.v4.view.PagerTitleStrip
android:id="@+id/pager_title_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:background="#33b5e5"
android:paddingBottom="4dp"
android:paddingTop="4dp"
android:textColor="#fff" />

</android.support.v4.view.ViewPager>

The Layout XML for the DummyFragment:
 <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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity$DummySectionFragment" >

<TextView
android:id="@+id/section_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</RelativeLayout>

Instead of the Dummy Fragment you can create your own Fragments.
Just create a new java class that extends “Fragment”.
You can attach your own Fragments to the “MainActivity” that way:
 @Override
 public Fragment getItem(int position) {
  Fragment fragment = new Fragment();
  switch (position) {
  case 0:
   return fragment = new Fragment1();
  case 1:
   return fragment = new Fragment2();
  case 2:
   return fragment = new Fragment3();
  default:
   break;
  }
  return fragment;

That’s all


FIX: I think there's a mistake here: try:
 @Override
 public Fragment getItem(int position) {
  Fragment fragment = new Fragment();
  switch (position) {
  case 0:
   return new Fragment1();
  case 1:
   return new Fragment2();
  case 2:
   return new Fragment3();
  default:
   break;
  }
  return fragment;
via: http://just-another-blog.net/

martes, 20 de agosto de 2013

Back to previous fragment with back button

To be able to go back to the previous fragment pressing the back hardware button we have to add the fragment adding null to the backstack.

This is the resultant code:
Fragment fragment = new Fragment();
  
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().add(R.id.content_frame, fragment).addToBackStack(null).commit();
 

jueves, 18 de julio de 2013

How to get view dimensions at onCreate

Hi, Trying to get the dimensions of my RelativeLayout at the onCreate of my Activity without no success, at the begining teh code seemed very easy :
RelativeLayout dashboard = (RelativeLayout)findViewById(R.id.dashboard);
int width = dashboard.getWidth()
no luck!, in this case getWidth() is always 0. Then I tryed to figure out why this happens and I realize that dashboard is not rendered yet, so, I have to find a callback after rendering to get the dashboard width... no luck! onResume didn't work neither, so I was researching through internet and I've found this blog where my problem is perfect solved. I've just going to put the code but you can read the entire article at http://code2thought.blogspot.com.es/2011/01/getting-layout-dimensions-in-android.html
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.dashboard);
  
  RelativeLayout dashboard = (GridLayout)findViewById(R.id.dashboard);
  
  
  dashboard.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
   
   @Override
   public void onGlobalLayout() {
    
    int width = dashboard.getWidth()
    
   }
  });
  
 }
happy coding!

martes, 16 de julio de 2013

GridLayout views out of the screen

Sometimes your views inside a gridlayout are outside the screen, to fix that you can give to your views android:width="0", that way it fits inside the Gridlayout.
<GridLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="2">

    <Button
        android:layout_column="0"
        android:layout_columnSpan="1"
        android:layout_gravity="start|end"
        android:layout_row="0"
        android:text="ASDFASDF"
         />

    <Button
        android:layout_column="1"
        android:layout_gravity="start|end"
        android:layout_row="0"
        android:text="SDAVDFBDFB" />

    <Button
        android:layout_column="0"
        android:layout_columnSpan="2"
        android:layout_gravity="fill|center"
        android:layout_row="1"
        android:text="ASDVADFBFDAFEW" />

    <Button
        android:layout_column="0"
        android:layout_columnSpan="1"
        android:layout_gravity="fill|center"
        android:layout_row="2"
        android:text="FWEA AWFWEA" />

    <Button
        android:layout_column="1"
        android:layout_columnSpan="1"
        android:layout_gravity="fill"
        android:layout_row="2"
        android:text="BERWEfasf" />

    <Button
        android:layout_width="94dp"
        android:layout_column="0"
        android:layout_columnSpan="1"
        android:layout_gravity="fill|center"
        android:layout_row="3"
        android:text="SDFVBFAEVSAD" />

    <Button
        android:layout_column="0"
        android:layout_columnSpan="1"
        android:layout_gravity="fill|center"
        android:layout_row="4"
        android:layout_rowSpan="2"
        android:text="GVBAERWEFSD" />

    <Button
        android:width="0dp"
        android:layout_column="1"
        android:layout_columnSpan="1"
        android:layout_gravity="fill|center"
        android:layout_row="3"
        android:layout_rowSpan="2"
        android:text="VSDFAVE SDFASDWA SDFASD" />

    <Button
        android:width="0dp"
        android:layout_column="1"
        android:layout_columnSpan="1"
        android:layout_gravity="fill|center"
        android:layout_row="5"
        android:text="FWEWEGAWEFWAE"/>

</GridLayout>

miércoles, 19 de junio de 2013

Fit map zoom to markers

Exists an easy way in Google Map API v2 to get the correct zoom for all the markers we have in the map:

 public void setZoom(List<LatLng> coords){
                GoogleMap map = getMap();
  LatLngBounds bounds = helper.getBounds(coords);

                int zoom_padding = 20;
  map.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, zoom_padding));
 }

        public LatLngBounds getBounds(List<LatLng> coords){
  
  LatLngBounds.Builder builder = new LatLngBounds.Builder();

  for(LatLng coord:coords){
   
    
                 builder.include(coord);
    
  }
  
  return builder.build();
 }

        
easy!

miércoles, 12 de junio de 2013

XML Parser (XmlPullParser)

I feel more confortable parsing JSON, but sometimes I get some services in XML. After reading some articles about parsing and reading the google advices I finally decided to use the class XMLPullParser, not bad, here an example.


First we get the xml
public InputStream getResponseInputStream(String url){
  
  Log.i("URL REQUEST",url);
  URL request;
  try {
   
   request = new URL(url); 
   HttpURLConnection  conn = (HttpURLConnection)request.openConnection(); 
   conn.setConnectTimeout(30000);
   conn.setReadTimeout(30000);
   
   InputStream is = conn.getInputStream();
   return is;

  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  
  return null;
 }

Create the parser
public List<Member> getMemberData(String url){
  
  InputStream is=null;
  try{
   is = getResponseInputStream(url);

   XmlPullParser parser = Xml.newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
         parser.setInput(is, null);
        
         parser.nextTag();
         List<Member> members = readMembers(parser);
   is.close();
   
   return members;
  
  } catch (Exception e) {
   e.printStackTrace();
   
  }
  
  return null;
 }
Parsing:
private List<Member> readMembers(XmlPullParser parser) throws XmlPullParserException, IOException {
     List<Member> entries = new ArrayList<Member>();

     parser.require(XmlPullParser.START_TAG, null, "root");
     while (parser.next() != XmlPullParser.END_TAG) {
         if (parser.getEventType() != XmlPullParser.START_TAG) {
             continue;
         }
         String name = parser.getName();
         // Starts by looking for the entry tag
         if (name.equals("item")) {
             entries.add(readMemberDetail(parser));
         } else {
             skip(parser);
         }
     }  
     return entries;
 }
 
 private Member readMemberDetail(XmlPullParser parser) throws XmlPullParserException, IOException {
     parser.require(XmlPullParser.START_TAG, null, "item");
     Member member = new Member();

     while (parser.next() != XmlPullParser.END_TAG) {
         if (parser.getEventType() != XmlPullParser.START_TAG) {
             continue;
         }
         
         String localName = parser.getName();
         
         if(localName.equals("id")) member.id = readText(parser,"id");
else if(localName.equals("name")) member.name = readText(parser,"name");
else if(localName.equals("address")) member.address = readText(parser,"address");
else skip(parser);

        
     }
     return member;
 }
And some utils like readText to get the content and skip if we get some tag we don't want to parse
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
     if (parser.getEventType() != XmlPullParser.START_TAG) {
         throw new IllegalStateException();
     }
     int depth = 1;
     while (depth != 0) {
         switch (parser.next()) {
         case XmlPullParser.END_TAG:
             depth--;
             break;
         case XmlPullParser.START_TAG:
             depth++;
             break;
         }
     }
  }
 
 public String readText(XmlPullParser parser, String tag){
  try{
   parser.require(XmlPullParser.START_TAG, null, tag);
      String text = readText(parser);
      parser.require(XmlPullParser.END_TAG, null, tag);
      return text;
  } catch (XmlPullParserException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  
  return null;
 }
More info