当前位置:  编程技术>移动开发
本页文章导读:
    ▪二叉树的思路,查寻1000个成语中的某一个成语        二叉树的思路,查找1000个成语中的某一个成语。 #include<stdio.h>#define MAX1 8800000 //准备查找成语文件的大小。int flag3 = 0;   //标记是否成功的变量。void toBinary(char *c,char *binaryArray) {    char.........
    ▪ AsyncTask异步上载图片        AsyncTask异步下载图片 这个例子是利用AsyncTask异步下载图片,下载时先将网络图片下载到本地cache目录保存,以imagUrl的图片文件名保存,如果有同名文件在cache目录就从本地加载。布局文件.........
    ▪ cxflogginglog4j日记输出       cxflogginglog4j日志输出 由于CXF,产生的日志是采用TOMCAT的日志,造成TOMCAT的日志特别多,日志文件奇大,   想通过LOG4J方式进行拦截,将警告与错误的信息才输出到控制文件,   在JAVA工程 src.........

[1]二叉树的思路,查寻1000个成语中的某一个成语
    来源: 互联网  发布时间: 2014-02-18
二叉树的思路,查找1000个成语中的某一个成语。




#include<stdio.h>
#define MAX1 8800000 //准备查找成语文件的大小。
int flag3 = 0;   //标记是否成功的变量。
void toBinary(char *c,char *binaryArray) {
    char ch[9] = {'\0'};
    int k = 0;
    int i;
    int j = 0;
    while ('\0' != c[j])//一个字一个字的循环。
    {
        if (c[j] != ',') {//当没有遇见逗号的时候。
            for (i = 7;i >= 0;i--)
            {
                ch[i] = (c[j]&1)+'0';
                c[j]>>=1;
            }
            for (int kk = 0; kk<=7; ++kk) {
                binaryArray[k] = ch[kk];
                k++;
            }
        }else {
            binaryArray[k] = ',';
            k++;
        }
        j++;
    }
}
void toBinary2(char *c,char *binaryArray,char *bijiao) {//判断bijiao是否在结果中。
    char ch[9] = {'\0'};
    int k = 0;
    int i;
    int j = 0;
    int flag = 0;//用于判断是否到下个汉字了。
    int k2 = 0;
    while ('\0' != c[j])
    {
        if (c[j] != ',') {//一个字节8位。
            for (i = 7;i >= 0;i--)
            {
                ch[i] = (c[j]&1)+'0';
                c[j]>>=1;
            }
            for (int kk = 0; kk<=7; ++kk) {
                binaryArray[k] = ch[kk];
                if (bijiao[k2]==binaryArray[k]) {
                    flag++;//当flag == 96 的时候就是遇见相同的了。
                }else{
                    flag = 0;
                }
                k++;
                k2++;
            }
        }else {
            binaryArray[k] = ',';
            k++;
            k2 = 0;//每当换下个词语的时候都归0;
            flag = 0;
        }
        j++;
        if (flag==96) {//如果flag ==96证明已经连续找到了四个相同的汉字了。
            flag3=1;
        }
    }
}
int main()
{
    FILE *fp;
    char name[97] = "张明炜在";//要查找的内容。
    //小的时候用栈完全可以,大的时候,必须用堆。
    char *filename = malloc(MAX1);//文件存放的内容。96*80000
    memset(filename,0,MAX1);//初始化为0,没有必要。
    char *bijiao = malloc(MAX1);
    memset(bijiao,0,MAX1);
    toBinary(name, bijiao);//把要找的内容转换为二进制。
    if((fp=fopen("/Users/zhangmingwei/Desktop/33.txt","r"))==NULL) //以读写方式打开
    {
        printf("Can not open file\n");
        return 0;
    }
    fgets(filename, MAX1, fp);//读取文件内容。
    char *res = malloc(MAX1);
    toBinary2(filename, res,bijiao);//把文件内容转换为二进制。用第二种方法来判断。
//    printf("res===%s",res);
//    puts(res);//res是以逗号分割的多个二进制的成语。
    //现在只需要查找,看bijiao 是否在res 中就行了。res 中的数据是以逗号分割的。

    if (flag3==1) {
        printf("\n\n恭喜你成功了。\n\n");
    }else{
        printf("\n\n对不起,没有找到。\n\n");
    }
    fclose(fp);
    free(filename);
    free(bijiao);
    free(res);
    return 0;
}



    
[2] AsyncTask异步上载图片
    来源: 互联网  发布时间: 2014-02-18
AsyncTask异步下载图片
这个例子是利用AsyncTask异步下载图片,下载时先将网络图片下载到本地cache目录保存,以imagUrl的图片文件名保存,如果有同名文件在cache目录就从本地加载。

布局文件,先用一个图片占位:
  <ImageView
     android:id="@+id/image"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:layout_gravity="center_horizontal"
     android:layout_marginTop="20dip"
     android:src="/blog_article/@drawable/product_default_icon/index.html" />


        private Context context = AsyncTaskDemo.this;
	private ImageView image;
	//图片地址
	private String imageUrl = "http://dl.iteye.com/upload/attachment/0080/1571/2b9a099a-0a7b-3a60-909e-97a8316716cb.jpg";

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.asynctask);
		getWidget();
		loadImage(imageUrl);
	}

	/** 获得组件 */
	public void getWidget() {
		image = (ImageView) findViewById(R.id.image);
	}

	private void loadImage(final String imageUrl) {
		ImageAsyncLoader asyncImageLoader = new ImageAsyncLoader();
		// 异步加载图片
		Drawable cachedImage = asyncImageLoader.loadDrawable(context, imageUrl, new ImageCallback() {
			public void imageLoaded(Drawable imageDrawable, String imageUrl) {
		if (imageDrawable != null) {
	image.setImageDrawable(ImageAsyncLoader.zoomDrawable(imageDrawable, ImageAsyncLoader.dip2px(context, 150), ImageAsyncLoader.dip2px(context, 150)));
				}
			}
		});
		if (cachedImage != null) {image.setImageDrawable(ImageAsyncLoader.zoomDrawable(cachedImage, ImageAsyncLoader.dip2px(context, 150), ImageAsyncLoader.dip2px(context, 150)));
		}
	}

图片异步加载:
/**
	 * SoftReference的主要特点是据有较强的引用功能。
	 *  只有当内存不够的时候,才进行回收这类内存,因此在内存足够的时候,它们通常不被回收。 
	 *  另外,这些引用对象还能保证在Java抛出OutOfMemory 异常之前,被设置为null。
	 *  它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory。
	 */
	private HashMap<String, SoftReference<Drawable>> cacheMap = null;
	private BlockingQueue<Runnable> queue = null;
	private ThreadPoolExecutor executor = null;
	
	public interface ImageCallback {
		public void imageLoaded(Drawable imageDrawable, String imageUrl);
	}
	
	public ImageAsyncLoader() {
		cacheMap = new HashMap<String, SoftReference<Drawable>>();
		/**
		 * 一个基于已链接节点的、范围任意的 blocking queue。
		 * 此队列按 FIFO(先进先出)排序元素。
		 * 队列的头部 是在队列中时间最长的元素。
		 * 队列的尾部 是在队列中时间最短的元素。
		 * 新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。
		 * 链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。
		 */
		queue = new LinkedBlockingQueue<Runnable>();
		/**
		 * 线程池维护线程的最少数量2 <br>
		 * 线程池维护线程的最大数量10<br>
		 * 线程池维护线程所允许的空闲时间180秒
		 */
		executor = new ThreadPoolExecutor(2, 10, 180, TimeUnit.SECONDS, queue);
	}

	public Drawable loadDrawable(final Context context, final String imageUrl, final ImageCallback imageCallback) {
		if (cacheMap.containsKey(imageUrl)) {
			SoftReference<Drawable> softReference = cacheMap.get(imageUrl);
			Drawable drawable = softReference.get();
			if (drawable != null) {
				return drawable;
			}
		}

		final Handler handler = new Handler() {
			public void handleMessage(Message message) {
				imageCallback.imageLoaded((Drawable) message.obj, imageUrl);
			}
		};

		// 将任务添加到线程池
		executor.execute(new Runnable() {
			public void run() {
				// 根据URL加载图片
				Drawable drawable = loadImageFromUrl(/blog_article/context, imageUrl/index.html);

				// 图片资源不为空是创建软引用
				if (null != drawable)
					cacheMap.put(imageUrl, new SoftReference<Drawable>(drawable));

				Message message = handler.obtainMessage(0, drawable);
				handler.sendMessage(message);
			}
		});

		return null;
	}

	// 网络图片先下载到本地cache目录保存,以imagUrl的图片文件名保存,如果有同名文件在cache目录就从本地加载
	public static Drawable loadImageFromUrl(/blog_article/Context context, String imageUrl/index.html) {
		Drawable drawable = null;

		if (imageUrl == null)
			return null;
		String fileName = "";

		// 获取url中图片的文件名与后缀
		if (imageUrl != null && imageUrl.length() != 0) {
			fileName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1);
		}

		// 根据图片的名称创建文件(不存在:创建)
		File file = new File(context.getCacheDir(), fileName);

		// 如果在缓存中找不到指定图片则下载
		if (!file.exists() && !file.isDirectory()) {
			try {
				// 从网络上下载图片并写入文件
				FileOutputStream fos = new FileOutputStream(file);
				InputStream is = new URL(/blog_article/imageUrl/index.html).openStream();
				int data = is.read();
				while (data != -1) {
					fos.write(data);
					data = is.read();
				}
				fos.close();
				is.close();

				drawable = Drawable.createFromPath(file.toString());
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		// 如果缓存中有则直接使用缓存中的图片
		else {
			drawable = Drawable.createFromPath(file.toString());
		}
		return drawable;
	}


常用图片处理方法:
/**
	 * 缩放Drawable
	 * 
	 * @param drawable
	 * @param w 缩放后的宽
	 * @param h 缩放后的高
	 * @return Drawable
	 */
	public static Drawable zoomDrawable(Drawable drawable, int w, int h) {
		int width = drawable.getIntrinsicWidth();
		int height = drawable.getIntrinsicHeight();
		// drawable转换成bitmap
		Bitmap oldbmp = drawableToBitmap(drawable);
		// 创建操作图片用的Matrix对象
		Matrix matrix = new Matrix();
		// 计算缩放比例
		float scaleWidth = ((float) w / width);
		float scaleHeight = ((float) h / height);
		matrix.postScale(scaleWidth, scaleHeight);
		// 设置缩放比例
		Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true);
		return new BitmapDrawable(newbmp);
	}

	/**
	 * 将drawable转换成bitmap
	 * 
	 * @param drawable
	 * @return Bitmap
	 */
	private static Bitmap drawableToBitmap(Drawable drawable) {
		// 取drawable的长宽
		int width = drawable.getIntrinsicWidth();
		int height = drawable.getIntrinsicHeight();
		Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; // 取drawable的颜色格式

		Bitmap bitmap = Bitmap.createBitmap(width, height, config);
		Canvas canvas = new Canvas(bitmap);
		drawable.setBounds(0, 0, width, height);
		drawable.draw(canvas);
		return bitmap;
	}

	/**
	 * 单位转换:dip => px
	 * 
	 * @param ctx 上下文环境
	 * @param dipValue
	 * @return
	 */
	public static int dip2px(Context ctx, int dipValue) {
		final float scale = ctx.getResources().getDisplayMetrics().density;
		return (int) (dipValue * scale);
	}


配置文件:
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

    
[3] cxflogginglog4j日记输出
    来源: 互联网  发布时间: 2014-02-18
cxflogginglog4j日志输出

由于CXF,产生的日志是采用TOMCAT的日志,造成TOMCAT的日志特别多,日志文件奇大,

 

想通过LOG4J方式进行拦截,将警告与错误的信息才输出到控制文件,

 

在JAVA工程 src目录下建个META-INF目录 ,再此目录下建个cxf目录,在cxf目录下新建个org.apache.cxf.Logger文件,添加以下内容:

org.apache.cxf.common.logging.Log4jLogger

即可,采用Log4j管理CXF日志

 

 

工程的classes 文件夹中 创建/META-INF/cxf目录 然后在这个目录下 

创建一个 名称为: org.apache.cxf.Logger的无扩展名的文件,

然后在文件中 添加一行如下:
org.apache.cxf.common.logging.Log4jLogger 
这个内容。 

然后 你在代码中使用 LoggingOutInterceptor  就可以使日志 使用 log4j 打印到日志文件中去了


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android提高之MediaPlayer播放网络音频的实现方法... iis7站长之家
▪根据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