当前位置:  编程技术>移动开发
本页文章导读:
    ▪[官方Demo]SpinnerDemo 各种上拉菜单        [官方Demo]SpinnerDemo 各种下拉菜单 SpinnerDemo.java   /* * SpinnerDemo.java * * Copyright �1998-2010 Research In Motion Ltd. * * Note: For the sake of simplicity, this sample application may not leverage * resource bundles and resour.........
    ▪ 背景圆角以及图片圆角处置        背景圆角以及图片圆角处理 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android">         <item android:drawable="@drawable/icon_home_button_img"/>         .........
    ▪ [官方Demo]SocketDemo 通讯例子       [官方Demo]SocketDemo 通信例子 SocketDemo.java   /** * SocketDemo.java * * Copyright �1998-2010 Research In Motion Ltd. * * Note: For the sake of simplicity, this sample application may not leverage * resource bundles and resource str.........

[1][官方Demo]SpinnerDemo 各种上拉菜单
    来源: 互联网  发布时间: 2014-02-18
[官方Demo]SpinnerDemo 各种下拉菜单

SpinnerDemo.java

 

/*
 * SpinnerDemo.java
 *
 * Copyright �1998-2010 Research In Motion Ltd.
 * 
 * Note: For the sake of simplicity, this sample application may not leverage
 * resource bundles and resource strings.  However, it is STRONGLY recommended
 * that application developers make use of the localization features available
 * within the BlackBerry development platform to ensure a seamless application
 * experience across a variety of languages and geographies.  For more information
 * on localizing your application, please refer to the BlackBerry Java Development
 * Environment Development Guide associated with this release.
 */

package com.rim.samples.device.ui.spinnerdemo;

import net.rim.device.api.ui.UiApplication;


/**
 * This sample application demonstrates the
 * net.rim.device.api.ui.picker.DateTimePicker class and the
 * net.rim.device.api.ui.component.TextSpinBoxField class.  
 */
public class SpinnerDemo extends UiApplication
{
    /**
     * Entry point for application
     * @param args Command line arguments (not used)
     */
    public static void main(String[] args)
    {
        // Create a new instance of the application and make the currently
        // running thread the application's event dispatch thread.
        SpinnerDemo app = new SpinnerDemo();
        app.enterEventDispatcher();        
    }

    /**
     * Creates a new SpinnerDemo object
     */
    public SpinnerDemo()
    {
        pushScreen(new SpinnerDemoScreen());
    }    
}

 

 

SpinnerDemoScreen.java

 

/*
 * SpinnerDemoScreen.java
 *
 * Copyright �1998-2010 Research In Motion Ltd.
 * 
 * Note: For the sake of simplicity, this sample application may not leverage
 * resource bundles and resource strings.  However, it is STRONGLY recommended
 * that application developers make use of the localization features available
 * within the BlackBerry development platform to ensure a seamless application
 * experience across a variety of languages and geographies.  For more information
 * on localizing your application, please refer to the BlackBerry Java Development
 * Environment Development Guide associated with this release.
 */

package com.rim.samples.device.ui.spinnerdemo;

import java.util.Calendar;
import java.util.Date;

import net.rim.device.api.i18n.SimpleDateFormat;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Screen;
import net.rim.device.api.ui.TouchEvent;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.BasicEditField;
import net.rim.device.api.ui.component.DateField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.SeparatorField;
import net.rim.device.api.ui.component.TextSpinBoxField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.picker.DateTimePicker;


/**
 * MainScreen class for the Date Time Picker Spinner Demo application 
 */
public class SpinnerDemoScreen extends MainScreen 
{
    private static final int DEFAULT = 1;
    private static final  int DATE = 2;
    private static final int TIME = 3;
    private static final int LONG = 4;
    private static final int EXPIRY = 5;
    private static final int SPINBOX = 6;  
    
    private BasicEditField _editFieldDefault;
    private BasicEditField _editFieldDate;
    private BasicEditField _editFieldTime;
    private BasicEditField _editFieldLong;
    private BasicEditField _editFieldExpiry;
    private BasicEditField _editFieldSpinbox;   
    
    private final SimpleDateFormat _defaultDateFormat = new SimpleDateFormat(SimpleDateFormat.DATETIME_DEFAULT|SimpleDateFormat.TIME_DEFAULT);
    private final SimpleDateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    private final SimpleDateFormat _timeFormat = new SimpleDateFormat("hh:mm:ss aa");
    private final SimpleDateFormat _longDateFormat = new SimpleDateFormat(SimpleDateFormat.DATE_LONG|SimpleDateFormat.TIME_DEFAULT);
    private final SimpleDateFormat _expiryDateFormat = new SimpleDateFormat("MM/yyyy");
    
    private Calendar _defaultCal;
    private Calendar _dateCal;
    private Calendar _timeCal;
    private Calendar _longDateCal;
    private Calendar _expiryDateCal;
    
    private CustomSpinnerPopup _customSpinnerPopup;


    /**
     * Creates a new SpinnerDemoScreen object
     */
    public SpinnerDemoScreen()
    {
        setTitle("Spinner Demo");
        
        // Initialize a VerticalFieldManager
        VerticalFieldManager fieldManager = new VerticalFieldManager();
        
        
        
        // Add a typical date field to the VerticalFieldManager   
        fieldManager.add(new LabelField("Date Field\n",Field.FIELD_HCENTER));   
        DateField dateField = new DateField("Date/time: ", System.currentTimeMillis(), DateField.DATE_TIME);
        fieldManager.add(dateField);   
        
        // Add UI elements to the VerticalFieldManager, including fields
        // which will allow a user to make selections from date/time and
        // custom spinners.
        fieldManager.add(new SeparatorField()); 
          
        fieldManager.add(new LabelField("Date Time Picker\n",Field.FIELD_HCENTER));   
        
        _editFieldDefault = new BasicEditField("Default: ","Click to select");        
        fieldManager.add(_editFieldDefault);  
        
        
        _editFieldDate = new BasicEditField("Date only: ","Click to select");        
        fieldManager.add(_editFieldDate);  
        
        _editFieldTime = new BasicEditField("Time only: ","Click to select");        
        fieldManager.add(_editFieldTime);           
        
        _editFieldLong = new BasicEditField("Long date: ","Click to select");        
        fieldManager.add(_editFieldLong);           
        
        _editFieldExpiry = new BasicEditField("Expiry date: ","Click to select");        
        fieldManager.add(_editFieldExpiry);  
        
        fieldManager.add(new SeparatorField());   
        
        fieldManager.add(new LabelField("Text Spin Box Field\n",Field.FIELD_HCENTER));   
        
        _editFieldSpinbox = new BasicEditField("City: ","Click to select");        
        fieldManager.add(_editFieldSpinbox);          
        
        // Add the VerticalFieldManager to the screen
        add(fieldManager);       
    }    
    
    
    /**
     * Displays a spinner dialog for a given type
     * @param type Type of spinner to display
     */
    void showSpinnerDialog(int type)
    {
        switch(type)
        {
            case  DEFAULT:
                DateTimePicker datePicker = DateTimePicker.createInstance(_defaultCal);            
                if(datePicker.doModal())
                {
                    StringBuffer dateStr = new StringBuffer();
                    _defaultCal = datePicker.getDateTime();
                    _defaultDateFormat.format(_defaultCal, dateStr, null);            
                    _editFieldDefault.setText(dateStr.toString());
                }           
                break;
            case  DATE:              
                DateTimePicker datePickerDate = DateTimePicker.createInstance( _dateCal, "yyyy-MM-dd", null);
                if(datePickerDate.doModal())
                {
                    StringBuffer dateStrDate = new StringBuffer();
                    _dateCal = datePickerDate.getDateTime();
                    _dateFormat.format(_dateCal, dateStrDate, null);            
                    _editFieldDate.setText(dateStrDate.toString());            
                }
                break;
            case  TIME:
                DateTimePicker datePickerTime = DateTimePicker.createInstance( _timeCal, null, "hh:mm:ss aa");
                if(datePickerTime.doModal())
                {
                    StringBuffer dateStrTime = new StringBuffer();
                    _timeCal = datePickerTime.getDateTime();
                    _timeFormat.format(_timeCal, dateStrTime, null);            
                    _editFieldTime.setText(dateStrTime.toString());            
                }
                break;
            case  LONG:
                DateTimePicker datePickerLong = DateTimePicker.createInstance( _longDateCal, SimpleDateFormat.DATE_LONG, SimpleDateFormat.TIME_DEFAULT);
                if(datePickerLong.doModal())
                {
                    StringBuffer dateStrLong = new StringBuffer();
                    _longDateCal = datePickerLong.getDateTime();
                    _longDateFormat.format(_longDateCal, dateStrLong, null);            
                    _editFieldLong.setText(dateStrLong.toString());            
                }
                break;
            case  EXPIRY:            
                DateTimePicker datePickerExpiry = DateTimePicker.createInstance( _expiryDateCal, _expiryDateFormat.toPattern(), null);
                if(datePickerExpiry.doModal())
                {
                    StringBuffer dateStrExpiry = new StringBuffer();
                    _expiryDateCal = datePickerExpiry.getDateTime();
                    _expiryDateFormat.format(_expiryDateCal, dateStrExpiry, null);            
                    _editFieldExpiry.setText(dateStrExpiry.toString());
                }
                break;
            case  SPINBOX:
                if(_customSpinnerPopup == null)
                {
                    _customSpinnerPopup = new CustomSpinnerPopup();
                }
                UiApplication.getUiApplication().pushModalScreen(_customSpinnerPopup);
                if(_customSpinnerPopup.isSet())
                {    
                    String choice = _customSpinnerPopup.getChoice();
                    _editFieldSpinbox.setText(choice);
                }                       
                break;
        }             
    }
    
    
    /**
     * @see Screen#touchEvent(TouchEvent)
     */
    protected boolean touchEvent(TouchEvent message)
    {
        if(message.getEvent() == TouchEvent.CLICK)
        {
            int type= 0;
            
            if(_editFieldDefault.isFocus())
            {
                type = DEFAULT;                              
            }
            else if (_editFieldDate.isFocus())
            {
                type = DATE;
            }
            else if (_editFieldTime.isFocus())
            {
                type = TIME;
            }
            else if (_editFieldLong.isFocus())
            {
                type = LONG;
            }
            else if (_editFieldExpiry.isFocus())
            {
                type = EXPIRY;
            }  
            else if (_editFieldSpinbox.isFocus())
            {
                type = SPINBOX;                
            }
            if(type > 0)
            {
                showSpinnerDialog(type);        
            }
            return true;
        }
        return super.touchEvent(message);
    }
    
    
    /**
     * @see Screen#navigationClick(int, int)
     */
    protected boolean navigationClick(int status, int time)
    {
        int type = 0;
        boolean returnValue = false;
            
        if(_editFieldDefault.isFocus())
        {
            type = DEFAULT;         
            returnValue = true;                   
        }
        else if (_editFieldDate.isFocus())
        {
            type = DATE;
            returnValue = true;
        }
        else if (_editFieldTime.isFocus())
        {
            type = TIME;
            returnValue = true;
        }
        else if (_editFieldLong.isFocus())
        {
            type = LONG;
            returnValue = true;
        }
        else if (_editFieldExpiry.isFocus())
        {
            type = EXPIRY;
            returnValue = true;
        }  
        else if (_editFieldSpinbox.isFocus())
        {
            type = SPINBOX;
            returnValue = true;
        }
        if(type > 0)
        {
            showSpinnerDialog(type);        
        }
        return returnValue;        
    }
    
    
    /**
     * @see MainScreen#onSavePrompt()
     */
    protected boolean onSavePrompt()
    {
        // Suppress the save dialog
        return true;
    }     
    
    
    /**
     * A PopupScreen to display a TextSpinBoxField
     */
    public final static class CustomSpinnerPopup extends PopupScreen     
    {
        private TextSpinBoxField _spinBoxField;
        private boolean _isSet;        
        
        /**
         * Creates a new CustomSpinnerPopup object
         */
        public CustomSpinnerPopup()
        {           
            super(new VerticalFieldManager(), Screen.DEFAULT_CLOSE);            
            String[] choices = {"New York", "Paris", "Barcelona", "Beijing", "Moscow", "Brasilia", "Melbourne"};            
            _spinBoxField = new TextSpinBoxField(choices);
            _spinBoxField.setVisibleRows(3);            
            add(new LabelField("Choose city:"));
            add(new SeparatorField());
            HorizontalFieldManager hfm = new HorizontalFieldManager(Field.FIELD_HCENTER);
            hfm.add(_spinBoxField);
            add(hfm);            
        }
        
        
        /**
         * Retrieves the currently selected choice
         * @return The currently selected choice
         */
        public String getChoice()
        {
            return (String)_spinBoxField.get(_spinBoxField.getSelectedIndex());
        }
        
        
        /**
         * Indicates whether the TextSpinBoxField has changed from
         * its initial state.
         * @return True if the selected choice has been modified, otherwise false
         */
        public boolean isSet()
        {
            return _isSet;
        }        
        
        
        /**
         * @see Screen#invokeAction(int)
         */
        protected boolean invokeAction(int action)
        {
            if(action == ACTION_INVOKE)
            {
                if(!_isSet)
                {                    
                    _isSet = true;
                }                
                close();
                return true;
            }
            return false;
        }    
        
        
        /**
         * @see Screen#close()
         */
        public void close()
        {
            if(!_isSet)
            {                
                _spinBoxField.setSelectedIndex(0);
            }
            super.close();
        }  
    }    
}

 

 

 

 

 


    
[2] 背景圆角以及图片圆角处置
    来源: 互联网  发布时间: 2014-02-18
背景圆角以及图片圆角处理

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
        <item android:drawable="@drawable/icon_home_button_img"/> 
        <item android:drawable="@drawable/icon_home_shape_overlay"/> </layer-list> 

 

 

 

icon_home_shape_overlay如下

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#60000000"/> 
    <stroke android:width="3dp" color="#ff000000"/> 
    <corners android:radius="10dp" /> 
</shape> 
或者直接使用一种效果

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#99FFFFFF"/> 
    <corners android:radius="30px"/> 
    <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />  
</shape>

然后 android:background="@drawable/my_shape_file" 

 

 2.图片本身加上圆角

Bitmap myCoolBitmap = ... ; // <-- Your bitmap you want rounded     
int w = myCoolBitmap.getWidth(), h = myCoolBitmap.getHeight(); 
 
Bitmap rounder = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888); 
Canvas canvas = new Canvas(rounder);     
 
Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
xferPaint.setColor(Color.RED); 
 
canvas.drawRoundRect(new RectF(0,0,w,h), 20.0f, 20.0f, xferPaint);      
 
xferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 
canvas.drawBitmap(myCoolBitmap, 0,0, null); 
canvas.drawBitmap(rounder, 0, 0, xferPaint); 
或者

 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
        bitmap.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
 
    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    final float roundPx = 12;
 
    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);
 
    return output;
  }


    
[3] [官方Demo]SocketDemo 通讯例子
    来源: 互联网  发布时间: 2014-02-18
[官方Demo]SocketDemo 通信例子

SocketDemo.java

 

/**
 * SocketDemo.java
 * 
 * Copyright �1998-2010 Research In Motion Ltd.
 * 
 * Note: For the sake of simplicity, this sample application may not leverage
 * resource bundles and resource strings.  However, it is STRONGLY recommended
 * that application developers make use of the localization features available
 * within the BlackBerry development platform to ensure a seamless application
 * experience across a variety of languages and geographies.  For more information
 * on localizing your application, please refer to the BlackBerry Java Development
 * Environment Development Guide associated with this release.
 */

package com.rim.samples.device.socketdemo;

import net.rim.device.api.ui.*;

/**
 * This sample enables client/server communication using a simple implementation 
 * of TCP sockets. The client application allows the user to select direct TCP as
 * the connection method.  If direct TCP is not selected, a proxy TCP connection
 * is opened using the BlackBerry MDS Connection Service. The server application 
 * can be found in com/rim/samples/server/socketdemo. 
 */
public class SocketDemo extends UiApplication
{   
    SocketDemoScreen _screen;
    
    /**
     * Entry point for application.
     * @param Command line arguments.
     */
    public static void main(String[] args)
    {
        // Create a new instance of the application and make the currently
        // running thread the application's event dispatch thread.
        SocketDemo app = new SocketDemo();
        app.enterEventDispatcher();
    }
    
    // Constructor
    public SocketDemo()
    {
        // Create a new screen for the application.
        _screen = new SocketDemoScreen();        

        // Push the screen onto the UI stack for rendering.
        pushScreen(_screen);
    }    
    
    /**
     * Provides access to this application's UI screen
     * @return This application's UI screen.
     */
    SocketDemoScreen getScreen()
    {
        return _screen;
    }      
}

 

SocketDemoScreen.java

 

/*
 * SocketDemoScreen.java
 *
 * Copyright �1998-2010 Research In Motion Ltd.
 * 
 * Note: For the sake of simplicity, this sample application may not leverage
 * resource bundles and resource strings.  However, it is STRONGLY recommended
 * that application developers make use of the localization features available
 * within the BlackBerry development platform to ensure a seamless application
 * experience across a variety of languages and geographies.  For more information
 * on localizing your application, please refer to the BlackBerry Java Development
 * Environment Development Guide associated with this release.
 */

package com.rim.samples.device.socketdemo;

import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;

/**
 * A MainScreen class to allow for user interaction.
 */
public class SocketDemoScreen extends MainScreen
{     
    private EditField _hostField;    
    private CheckboxField _useDirectTcpField;
    private RichTextField _statusField;              
    private StringBuffer _message;
    private boolean _threadRunning = false;    
    
    // Constructor
    public SocketDemoScreen()
    {          
        setTitle(new LabelField("Socket Demo"));           
        
        add(new RichTextField("Enter local host name in the field below and select 'Go' from the menu." ,Field.NON_FOCUSABLE));
        add(new SeparatorField());
        
        // Need to get the local host name from the user because access to
        // 'localhost' and 127.0.0.1 is restricted.
        _hostField = new EditField("Local Host: " , "");    
        add(_hostField);
        
        _useDirectTcpField = new CheckboxField("Use Direct TCP" , RadioInfo.getNetworkType() == RadioInfo.NETWORK_IDEN);
        add(_useDirectTcpField);
        
        _statusField = new RichTextField(Field.NON_FOCUSABLE);    
        add(_statusField);
        
        _message = new StringBuffer();
    }
    
    /**
    * Method to display a message to the user.
    * @param msg The message to display.
    */
    void updateDisplay(final String msg)
    {
        UiApplication.getUiApplication().invokeLater(new Runnable() 
        {
            public void run()
            {
                _message.append(msg);
                _message.append('\n');
                _statusField.setText(_message.toString());
            }
        });
    }
    
    /**
     * Returns the text entered by the user.
     * @return text entered by the user.
     */
    String getHostFieldText()
    {
        return _hostField.getText();
    }
    
    /**
     * Indicates whether the direct TCP checkbox is checked.
     * @return True if checkbox is checked, otherwise false.
     */
    boolean isDirectTCP()
    {
        return _useDirectTcpField.getChecked();
    }
    
    /**
     * Setter for boolean _threadRunning
     * @param running True if a ConnectThread is running, otherwise false.
     */
    void setThreadRunning(boolean running)
    {
        _threadRunning = running;
    }
    
   /**
    *@see net.rim.device.api.ui.container.MainScreen#makeMenu(Menu,int)
    */     
    protected void makeMenu(Menu menu, int instance)
    {
        // If a ConnectThread is running we won't add our menu item
        if (!_threadRunning)
        {
            menu.add(_go);
        }       
        super.makeMenu(menu, instance);
    }
    

   /**
    * Prevent the save dialog from being displayed, nothing to save.
    * 
    * @see net.rim.device.api.ui.container.MainScreen#onSavePrompt()
    */
    public boolean onSavePrompt()
    {
        return true;
    }   
    
   /**
    * Handles the user pressing ENTER while the 
    * 'use direct tcp' CheckboxField has focus. 
    * 
    * @see net.rim.device.api.ui.Screen#keyChar(char,int,int)
    * 
    */
    protected boolean keyChar( char key, int status, int time )
    {
        if ( key == Characters.ENTER )
        {
            Field fieldWithFocus = getFieldWithFocus(); 
            
            if(fieldWithFocus == _useDirectTcpField)
            {
                    if(_useDirectTcpField.getChecked())
                    {
                            _useDirectTcpField.setChecked(false);
                    }
                    else
                    {
                            _useDirectTcpField.setChecked(true);
                    } 
                                        
                return true; // We've consumed the event.                
            }            
        }
        
        return super.keyChar( key, status, time ); // We'll let super handle the event.
    }
   
   
   /**
    * An anonymous MenuItem class.
    */
     
    private MenuItem _go = new MenuItem("Go" , 11000, 0)
    {
        public void run()
        {
            // Don't do anything unless there is a host name in the _host field.
            if (_hostField.getText().length() > 0)
            {
                new ConnectThread().start();
                _threadRunning = true; 
                
                // Hide the virtual keyboard so the user can see status updates.
                if(VirtualKeyboard.isSupported())
                {
                    VirtualKeyboard keyboard = getVirtualKeyboard();
                    if(keyboard.getVisibility() != VirtualKeyboard.HIDE)
                    {
                        keyboard.setVisibility(VirtualKeyboard.HIDE);
                    }
                }                                                         
            }
            else
            {
                Dialog.ask(Dialog.D_OK, "Please enter a valid host name" );
            }
        }
    };    
}        
      
 

ConnectThread.java

/*
 * ConnectThread.java
 *
 * Copyright �1998-2010 Research In Motion Ltd.
 * 
 * Note: For the sake of simplicity, this sample application may not leverage
 * resource bundles and resource strings.  However, it is STRONGLY recommended
 * that application developers make use of the localization features available
 * within the BlackBerry development platform to ensure a seamless application
 * experience across a variety of languages and geographies.  For more information
 * on localizing your application, please refer to the BlackBerry Java Development
 * Environment Development Guide associated with this release.
 */

package com.rim.samples.device.socketdemo;

import java.io.*;
import javax.microedition.io.*;
import net.rim.device.api.ui.*;

/**
 * A thread class to handle communication with the server component.
 */
public class ConnectThread extends Thread
{       
    private InputStreamReader _in;
    private OutputStreamWriter _out;        
    private SocketDemoScreen _screen;   
    
    // Constructor
    public ConnectThread()
    {
        _screen = ((SocketDemo)UiApplication.getUiApplication()).getScreen(); 
    }
    
   /**
    * Pass some data to the server and wait for a response.
    * @param data The data to send.
    */
    private void exchange(String data) throws IOException
    {
        // Cache the length locally for better efficiency.
        int length = data.length();
        
        // Create an input array just big enough to hold the data
        // (we're expecting the same string back that we send).
        char[] input = new char[length];
        _out.write(data, 0, length);

        // Read character by character into the input array.
        for (int i = 0; i < length; ++i) 
        {
            input[i] = (char)_in.read();
        }

        // Hand the data to the parent class for updating the GUI. By explicitly 
        // creating the stringbuffer we can save a few object creations.
        StringBuffer s = new StringBuffer();
        s.append("Received: ") ;
        s.append(input, 0, length);
        _screen.updateDisplay(s.toString());
    }

   /**
    * Implementation of Thread.
    */
    public void run()
    {        
        StreamConnection connection = null;       
        
        try
        {
            _screen.updateDisplay("Opening Connection...");
            String url = "socket://" + _screen.getHostFieldText() + ":44444" + (_screen.isDirectTCP() ? ";deviceside=true" : "");                                    
            connection = (StreamConnection)Connector.open(url);
            _screen.updateDisplay("Connection open");

            _in = new InputStreamReader(connection.openInputStream());
            _out = new OutputStreamWriter(connection.openOutputStream());            

            // Send the HELLO string.
            exchange("Hello");

            // Execute further data exchange here...

            // Send the GOODBYE string.
            exchange("Goodbye and farewell");           
            
            _screen.updateDisplay("Done!");
        }
        catch(IOException e)
        {
            System.err.println(e.toString());
        }
        finally
        {              
            _screen.setThreadRunning(false);
            
            try
            {               
                _in.close();             
            }
            catch(IOException ioe)
            {                
            }
            try
            {       
                _out.close();             
            }
            catch(IOException ioe)
            {               
            }
            try
            {               
                connection.close();
            }
            catch(IOException ioe)
            {                
            }
        }
    }
}

 

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3