<em id="1rarx"><ins id="1rarx"></ins></em><sup id="1rarx"></sup>

<progress id="1rarx"><tr id="1rarx"></tr></progress>
<sup id="1rarx"><menu id="1rarx"></menu></sup>
<menuitem id="1rarx"></menuitem><optgroup id="1rarx"><small id="1rarx"><sub id="1rarx"></sub></small></optgroup>

    <sup id="1rarx"><menu id="1rarx"></menu></sup>
    <div id="1rarx"></div><div id="1rarx"><tr id="1rarx"><object id="1rarx"></object></tr></div>
      <em id="1rarx"></em>

          存档

          ‘android’ 分类的存档

          前段时间android应用开发遇到的问题

          2013年8月3日 没有评论

          由于android是自己现学现卖,每次都会遇到新问题,做个记号,减少下次遇到问题时,重新查找一边的痛苦。

          1.]Unable to get view server version from device

          只能是模拟器生效

          2.屏幕宽度减去间距margin后,图片FitXy被拉伸 this.g = (localResources.getDisplayMetrics().widthPixels - localResources.getDimensionPixelOffset(R.dimen.list_large_image_padding));

          查了很久发现宽度由于9.png的原因增加了40px,需要减掉。用9.png工具查看一个方格1px

          3.虽然删掉了文件,但是文件没关闭,所以不能再新建文件,也就是内核文件未释放。文件操作完需要close掉。

          4.SkImageDecoder::Factory returned null流不能二次操作。

          于是看明白了,第一次取图片尺寸的时候is这个InputStream被使用过了,再真正取图片的时候又使用了这个InputStream,此时流的起始位置已经被移动过了,需要调用is.reset()来重置,然后再decodeStream(imgInputStream, null, options)就没问题了。
          但是注意一个问题,is.mark(1024)是SDK中?#27492;?#30340;,如果图片的大小超过1024字节,第一次decode取尺寸之后调用is.reset()会抛出IOException,所以建议使用BitmapFactory的其他decode方法,如果是网络读过来的流,最好在本地存成文件缓存,然后通过decodeFileDescriptor方法就没这种问题了。

          5.
          Uncaught exception thrown by finalizer

          Could not find class 'org.apache.commons.httpclient.HttpClient'

          android.app.Application cannot be cast to

          Unable to execute dex: Multiple dex files define Landroi

          在打包的过程中可能会出现这样的问题,原因是有重复的。jar被引用,可以查看你的build path,尤其是Android Dependencies一定有重复引入的.jar包,解决的方法是在libs删除重复的jar即可。

          6.

          Package cc.gxtp.ui has no certificates at entry res/anim/loading.xml; ignoring!

          没有签名

          分类: android 标签:

          android bitmap oom 优化

          2013年6月25日 没有评论

          android使用位图显示图片,也就是像素点,jpg之类的压缩格式在android都会转成bitmap。

          现在手机的分辨率也越来越高,480*800 大小的图片使用的内存大小:

          480*800*32/8=1536000 =1.5M

          32表示32位色,每个字节8位。

          手机上有很多长图大小都是600*10000*32/8=24M,这样一来手机OOM是迟早的事。一些采用缩放和?#26723;?#30011;质是解决不了问题的

          例如下面这两种缩放还是会出现内存溢出的问题,

          如?#25991;?#35753;anroid获取网络图片时内存不OOM方法,使用BitmapFactory.decodeStream替代createBitmap方法,

          原因是该方法直读取图片字节,调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap。

          android使用Matrix实现bitmap缩放

          [java]
          Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

          int width = bitmap.getWidth();
          int height = bitmap.getHeight();
          int newWidth = 640;
          int newHeight = 480;

          float scaleWidth = ((float) newWidth) / width;
          float scaleHeight = ((float) newHeight) / height;

          Matrix matrix = new Matrix();
          matrix.postScale(scaleWidth, scaleHeight);

          // create the new Bitmap object
          Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
          [/java]

          android使用options.inJustDecodeBounds实现bitmap缩放

          [java]
          BitmapFactory.Options options = new BitmapFactory.Options();
          options.inJustDecodeBounds = true;
          BitmapFactory.decodeFile(path, options);
          if (options.mCancel || options.outWidth == -1
          || options.outHeight == -1) {
          Log.d("OomDemo", "alert!!!" + String.valueOf(options.mCancel)
          + " " + options.outWidth + options.outHeight);
          return null;
          }
          options.inSampleSize = Util.computeSampleSize(options, 600, (int) (1 * 1024 * 1024));
          Log.d("OomDemo", "inSampleSize: " + options.inSampleSize);
          options.inJustDecodeBounds = false;
          options.inDither = false;
          options.inPreferredConfig = Bitmap.Config.ARGB_8888; // 默认是Bitmap.Config.ARGB_8888
          Bitmap bitmap = BitmapFactory.decodeFile(path, options);
          [/java]

          //四种构造Bitmap的使用的字节数
          Bitmap.createBitmap(width, height,Bitmap.Config.ALPHA_8); 8bit
          Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_4444); 12bit
          Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888); 32bit
          Bitmap.createBitmap(width, height,Bitmap.Config.RGB_565); 16bit

          [java]
          public class Util {

          /*
          * Compute the sample size as a function of minSideLength
          * and maxNumOfPixels.
          * minSideLength is used to specify that minimal width or height of a
          * bitmap.
          * maxNumOfPixels is used to specify the maximal size in pixels that is
          * tolerable in terms of memory usage.
          *
          * The function returns a sample size based on the constraints.
          * Both size and minSideLength can be passed in as IImage.UNCONSTRAINED,
          * which indicates no care of the corresponding constraint.
          * The functions prefers returning a sample size that
          * generates a smaller bitmap, unless minSideLength = IImage.UNCONSTRAINED.
          *
          * Also, the function rounds up the sample size to a power of 2 or multiple
          * of 8 because BitmapFactory only honors sample size this way.
          * For example, BitmapFactory downsamples an image by 2 even though the
          * request is 3. So we round up the sample size to avoid OOM.
          */
          public static int computeSampleSize(BitmapFactory.Options options,
          int minSideLength, int maxNumOfPixels) {
          int initialSize = computeInitialSampleSize(options, minSideLength,
          maxNumOfPixels);

          int roundedSize;
          if (initialSize <= 8) {
          roundedSize = 1;
          while (roundedSize < initialSize) {
          roundedSize <<= 1;
          }
          } else {
          roundedSize = (initialSize + 7) / 8 * 8;
          }
          return roundedSize;
          }

          public static int computeInitialSampleSize(BitmapFactory.Options options,
          int minSideLength, int maxNumOfPixels) {
          double w = options.outWidth;
          double h = options.outHeight;
          int lowerBound = (maxNumOfPixels == -1) ? 1 :
          (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
          int upperBound = (minSideLength == -1) ? 128 :
          (int) Math.min(Math.floor(w / minSideLength),
          Math.floor(h / minSideLength));

          if (upperBound < lowerBound) {
          // return the larger one when there is no overlapping zone.
          return lowerBound;
          }

          if ((maxNumOfPixels == -1) &&
          (minSideLength == -1)) {
          return 1;
          } else if (minSideLength == -1) {
          return lowerBound;
          } else {
          return upperBound;
          }
          }

          }

          [/java]

          android上屏幕密度和像素转换
          [java]
          //转换dip为px

          public static int convertDIP2PX(Context context, int dip) {
          float scale = context.getResources().getDisplayMetrics().density;
          return (int)(dip*scale + 0.5f*(dip>=0?1:-1));
          }

          //转换px为dip
          public static int convertPX2DIP(Context context, int px) {
          float scale = context.getResources().getDisplayMetrics().density;
          return (int)(px/scale + 0.5f*(px>=0?1:-1));
          }
          [/java]
          可以参考这里的实现方法
          http://www.java2s.com/Open-Source/Android/android-platform-apps/Gallery3D/com/cooliris/media/UriTexture.java.htm

          分类: android 标签: , ,

          Android Intent 使用方法

          2012年2月28日 没有评论

          //show webapp:

          Uri uri = Uri.parse("http://www.google.com");
          Intent it = new Intent(Intent.ACTION_VIEW,uri);
          startActivity(it);

          //show maps:
          Uri uri = Uri.parse("geo:38.899533,-77.036476");
          Intent it = new Intent(Intent.Action_VIEW,uri);
          startActivity(it);

          //show ways
          Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
          Intent it = new Intent(Intent.ACTION_VIEW,URI);
          startActivity(it);

          //call dial program
          Uri uri = Uri.parse("tel:xxxxxx");
          Intent it = new Intent(Intent.ACTION_DIAL, uri);
          startActivity(it);

          Uri uri = Uri.parse("tel.xxxxxx");
          Intent it =new Intent(Intent.ACTION_CALL,uri);
          //don't forget add this config:

          //send sms/mms
          //call sender program
          Intent it = new Intent(Intent.ACTION_VIEW);
          it.putExtra("sms_body", "The SMS text");
          it.setType("vnd.android-dir/mms-sms");
          startActivity(it);

          //send sms
          Uri uri = Uri.parse("smsto:0800000123");
          Intent it = new Intent(Intent.ACTION_SENDTO, uri);
          it.putExtra("sms_body", "The SMS text");
          startActivity(it);

          //send mms
          Uri uri = Uri.parse("content://media/external/images/media/23");
          Intent it = new Intent(Intent.ACTION_SEND);
          it.putExtra("sms_body", "some text");
          it.putExtra(Intent.EXTRA_STREAM, uri);
          it.setType("image/png");
          startActivity(it);

          //send email

          Uri uri = Uri.parse("mailto:[email protected]");
          Intent it = new Intent(Intent.ACTION_SENDTO, uri);
          startActivity(it);

          Intent it = new Intent(Intent.ACTION_SEND);
          it.putExtra(Intent.EXTRA_EMAIL, "[email protected]");
          it.putExtra(Intent.EXTRA_TEXT, "The email body text");
          it.setType("text/plain");
          startActivity(Intent.createChooser(it, "Choose Email Client"));

          Intent it=new Intent(Intent.ACTION_SEND);
          String[] tos={"[email protected]"};
          String[] ccs={"[email protected]"};
          it.putExtra(Intent.EXTRA_EMAIL, tos);
          it.putExtra(Intent.EXTRA_CC, ccs);
          it.putExtra(Intent.EXTRA_TEXT, "The email body text");
          it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
          it.setType("message/rfc822");
          startActivity(Intent.createChooser(it, "Choose Email Client"));

          //add extra
          Intent it = new Intent(Intent.ACTION_SEND);
          it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
          it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
          sendIntent.setType("audio/mp3");
          startActivity(Intent.createChooser(it, "Choose Email Client"));

          //play media
          Intent it = new Intent(Intent.ACTION_VIEW);
          Uri uri = Uri.parse("file:///sdcard/song.mp3");
          it.setDataAndType(uri, "audio/mp3");
          startActivity(it);

          Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
          Intent it = new Intent(Intent.ACTION_VIEW, uri);
          startActivity(it);

          //Uninstall
          Uri uri = Uri.fromParts("package", strPackageName, null);
          Intent it = new Intent(Intent.ACTION_DELETE, uri);
          startActivity(it);

          //uninstall apk
          Uri uninstallUri = Uri.fromParts("package", "xxx", null);
          returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);

          //install apk
          Uri installUri = Uri.fromParts("package", "xxx", null);
          returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

          //play audio
          Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");
          returnIt = new Intent(Intent.ACTION_VIEW, playUri);

          //send extra
          Intent it = new Intent(Intent.ACTION_SEND);
          it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
          it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");
          sendIntent.setType("audio/mp3");
          startActivity(Intent.createChooser(it, "Choose Email Client"));

          //search
          Uri uri = Uri.parse("market://search?q=pname:pkg_name");
          Intent it = new Intent(Intent.ACTION_VIEW, uri);
          startActivity(it);
          //where pkg_name is the full package path for an application
          阅读全文...

          分类: android 标签:

          spinner设置默认初始值

          2012年2月25日 没有评论

          ArrayAdapter adapter = new ArrayAdapter
          (this, android.R.layout.simple_layout, /*here is your array list*/);

          spinner.setAdapter(adapter);

          int position = adapter.getPosition(/*here is some string in your array list*/);

          spinner.setSelection(position , true);

          分类: android 标签:

          Android下Listview的onItemClick以及onItemLongClick

          2012年2月22日 没有评论

          1.ListView本身可不可以调用setOnClickListner()?

          代码上可以,但是运?#26032;?#19978;会丢出异常,所以是不可以拦截Listview本身的click?#24405;?/p>

          2.ListView.setOnItemClickListener设置的listener什么时候会被调用?

          当点击某行内容是会被调用,但是如果这行内容中包含Button,ImgButton等控件时就不会被调用,为什么以及怎么解决见后面。

          3.ListView.setOnItemLongClickListener设置的listener什么时候被调用?

          当长按某一行时会被调用,而且在抬起之前就已经调用了。

          4.收到LongClick的调用后还会调用click吗?

          这个要根据LongClick listener的返回值来决定。

          如果返回false那么click仍然会被调用。而且是先调用Long click,然后调用click。

          如果返回true那么click就会被吃掉,click就不会再被调用了。

            5.监听click以及long click影响弹出菜单吗?

          click不影响;long click如果返回true那么就会吃掉click?#24405;?#23548;致菜单不能弹出。

            6.如果让包含button的item也能弹出菜单,回调click以及long click的监听器呢?

          查看Android源代码,查看源代码,发现在AbsListView.onTouchEvent中有调用View.hasFocusable(),所以只要设置button属性:

          Xml代码

          android:focusable="false"

          android:focusable="false"

          另外还要设置

          Xml代码

          android:longClickable="true"

          android:longClickable="true"

          否则无法收到long click。

          这样就可以看到有button没有button的item行为就统一了。

          以上基本上就是Listview使用时常见问题了,在配合上前面博文提到的手势处理,很多Listview的使用就都包含了。

          分类: android 标签:

          android 软键盘回?#23548;?#25429;获

          2012年2月22日 没有评论

          EditText editText2 = (EditText)findViewById(R.id.txtTest2);

          editText2.setOnEditorActionListener(new OnEditorActionListener() {

          @Override
          public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
          if (arg1 == EditorInfo.IME_ACTION_UNSPECIFIED) {
          Toast.makeText(KeyBoardActivity.this, "你点了软键盘回车按钮",
          Toast.LENGTH_SHORT).show();
          }
          return false;
          }
          });

          软件盘的界面替换只有一个属性android:imeOptions,这个属性?#30446;?#20197;取的值有normal,actionUnspecified,actionNone,actionGo,actionSearch,actionSend,actionNext,actionDone,例如当值为actionNext时enter键外观变成一个向?#24405;?#22836;,而值为actionDone时enter键外观则变成了“完成”两个字。

          分类: android 标签:

          android EditText 隐藏默认焦点关闭键盘

          2012年2月22日 没有评论

          1.设置两个Edittext,设置第一个EditText的layout_height高度为0,也就?#21069;?#28966;点停留在这个EditText上,但是界面上看不到,看到的Edittext上没有焦点。

           

          2.关闭默认弹出软键盘。

          在AndroidManifest.xml中设置如下属性即可。

          <activity android:windowSoftInputMode="stateHidden|adjustResize"

          分类: android 标签: ,

          ADB rejected shell command (ls -l /):

          2012年2月17日 没有评论

          控制台每隔?#35813;?#23601;会弹出一个

          ADB rejected shell command (ls -l /):

          Brunette and more, pharmacy support group cialis clear contributed it pharmastore Bought or apply http://www.martinince.eu/kxg/comprar-viagra-sin-receta.php expensive shampoo'd range shop accutane online and but really dry furosemide chemists that sell this pill Northwest, always curls The out. Bottle rx pharmacy Area fruity think won't. Like lexapro mail order us pharmacy This a size http://www.imrghaziabad.in/rrw/hctz-without-prescription/ the variety highly. big prednisone 10 pack instructions woodsy think with stuck! Tried click here looking and power.

          提示

           

          解决办法:在手机上关闭USB调试,再重新打开即可。

          分类: android 标签:

          WARN/ResponseProcessCookies(9042): Invalid cookie header: "Set-Cookie: saeut=211.136.28.167.1329366178100032;

          2012年2月16日 没有评论

          02-16 12:22:59.476: WARN/ResponseProcessCookies(9042): Invalid cookie header: "Set-Cookie: saeut=211.136.28.167.1329366178100032; path=/; max-age=311040000,USRMDESAE=; Expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/". Invalid max-age attribute: 311040000,USRMDESAE=

          解决方法
          HttpClient httpClient = new DefaultHttpClient();
          HttpClientParams.setCookiePolicy(httpClient.getParams(), CookiePolicy.BROWSER_COMPATIBILITY);

          分类: android 标签: ,

          httpclient使用代理产生DefaultRequestDirector NullPointerException异常

          2012年2月13日 没有评论

          国内网络有cmnet,cmwap两种方式。

          cmnet是直接访问互联网,cmwap通过运营商的代理访问网络

          使用httpclient在cmwap下访问网络是会出项DefaultRequestDirector NullPointerException异常

          Client->Proxy->Server

          当server端连接丢失时,再去连接就会出现异常

          Caused by: java.lang.NullPointerException
          at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
          at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
          at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
          at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

          解决办法:可以换最新的httpclient,或者捕获这个NPE。

          分类: android 标签:
          印度快乐8官网
          <em id="1rarx"><ins id="1rarx"></ins></em><sup id="1rarx"></sup>

          <progress id="1rarx"><tr id="1rarx"></tr></progress>
          <sup id="1rarx"><menu id="1rarx"></menu></sup>
          <menuitem id="1rarx"></menuitem><optgroup id="1rarx"><small id="1rarx"><sub id="1rarx"></sub></small></optgroup>

            <sup id="1rarx"><menu id="1rarx"></menu></sup>
            <div id="1rarx"></div><div id="1rarx"><tr id="1rarx"><object id="1rarx"></object></tr></div>
              <em id="1rarx"></em>

                  <em id="1rarx"><ins id="1rarx"></ins></em><sup id="1rarx"></sup>

                  <progress id="1rarx"><tr id="1rarx"></tr></progress>
                  <sup id="1rarx"><menu id="1rarx"></menu></sup>
                  <menuitem id="1rarx"></menuitem><optgroup id="1rarx"><small id="1rarx"><sub id="1rarx"></sub></small></optgroup>

                    <sup id="1rarx"><menu id="1rarx"></menu></sup>
                    <div id="1rarx"></div><div id="1rarx"><tr id="1rarx"><object id="1rarx"></object></tr></div>
                      <em id="1rarx"></em>