我的应用在索尼Experia (2.3)上运行成功,但在三星Galaxy Tab (4.1)上运行时出现了异常。我的问题是,在录制视频并将其转换为base64字符串后,我在将其解析为soap时出错。
这是我捕捉视频的代码(传递意图):
Intent videoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
videoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);
videoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
startActivityForResult(videoIntent, ACTION_TAKE_VIDEO);
论活动结果法:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if ((requestCode == ACTION_TAKE_VIDEO && resultCode == RESULT_OK)) {
System.out.println("capturing video");
Uri selectedImage = data.getData();
String videoPath = getRealPathFromURI(selectedImage);
Bitmap bm = ThumbnailUtils.createVideoThumbnail(videoPath, MediaStore.Images.Thumbnails.MINI_KIND);
videoview.setImageBitmap(bm);
System.out.println("videobitmap=="+bm);
bytes[]datas = null;
String dataPath = videoPath;
InputStream is = null;
try {
is = new FileInputStream(dataPath);
datas = readBytes(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String encodedImage = Base64.encodeToString(datas, Base64.DEFAULT);
isInternetPresent = cd.isConnectingToInternet();
if (isInternetPresent) {
new BufferingVideo().execute(encodedImage);
} else {
Toast.makeText(getApplicationContext(), "Sorry, we couldn't connect to server, please check your
internet connection", Toast.LENGTH_LONG).show();
}
}
}
public byte[] readBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
return byteBuffer.toByteArray();
}
public String getRealPathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
现在将base64字符串传递给Webservice:
protected String doInBackground(String... params) {
String st = params[0];
System.out.println("st==== " + st);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME4);
System.err.println("Request = " + request);
request.addProperty("VideoBuffer", st);
request.addProperty("VideoName", "VideoCar");
request.addProperty("ModuleName", modulename);
}
我的Logcat错误是:
FATAL EXCEPTION: AsyncTask #5 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:299) at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) at java.util.concurrent.FutureTask.setException(FutureTask.java:124) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) at java.util.concurrent.FutureTask.run(FutureTask.java:137) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) at java.lang.Thread.run(Thread.java:856) Caused by: java.lang.OutOfMemoryError at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94) at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145) at java.lang.StringBuffer.append(StringBuffer.java:219) at org.ksoap2.serialization.SoapObject.toString(SoapObject.java:456) at java.lang.StringBuilder.append(StringBuilder.java:202) at web.org.HouseRentInsertAds$BufferingVideo.doInBackground(HouseRentInsertAds.java:897) at web.org.HouseRentInsertAds$BufferingVideo.doInBackground(HouseRentInsertAds.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:287) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
请给我一个解决方案。
你必须先压缩图像,然后才能将整个图像发送到服务器。
公开
String String_Image;
Bitmap bitmap;
这里解码图像并将压缩图像发送到服务器的过程
File image_file = new File(path);
decodeFile(image_file);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bao);
byte[] ba = bao.toByteArray();
String_Image = Base64.encodeBytes(ba);
decodeFile()
函数将解码您的文件。
private Bitmap decodeFile(File f)
{
try
{
// Decodes image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
// The new size to scale to
final int REQUIRED_SIZE = 70;
// Finds the correct scale value which should be the power of 2.
int scale = 1;
while (o.outWidth / scale / 2 >= REQUIRED_SIZE
&& o.outHeight / scale / 2 >= REQUIRED_SIZE)
scale *= 2;
// Decodes with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
bitmap = BitmapFactory.decodeStream(new FileInputStream(f), null,
o2);
return bitmap;
} catch (FileNotFoundException e)
{
}
return null;
}
将<code>String_Image
这个代码是为图像,但同样的方式,你也可以为其他人做。试着做些改变。
希望它能起作用。
问题内容: 当整数溢出发生而不是静默失败时,是否可能引发某种运行时异常。例如 由于溢出而打印,我想得到某种运行时异常 问题答案: 是的,从Java-8开始,您可以使用新的Exact方法,它将在溢出时引发异常(java.lang.ArithmeticException:整数溢出)。例如
我正在创建一个android应用程序,它以json格式显示从在线API获取的天气数据。为此,我使用的是格森图书馆。 我有以下JSON字符串,我从一个map对象中获得: 它包含以下值: 但是,当我尝试使用该字符串创建另一个贴图对象时,我遇到了一个异常。 异常logcat报告: 通用域名格式。谷歌。格森。JsonSyntaxException:com。谷歌。格森。流动MalformedJsonExce
我正试图通过使用以下方法来取消加密字符串,但遇到了异常。 我试图将我的加密字符串发送到下面的方法,但它不能得到Byte[],在将字符串转换为Byte[]时得到数字格式异常。 请建议。
首先,在测试用户何时登录或完全注册时,没有异常或错误,但当用户注销并重新打开应用程序时,应用程序崩溃。logcat基本上指出了这个错误: 但是如果我把currentUserID改为Users。。应用程序停止崩溃,运行平稳,但不会加载导航抽屉中的用户名和个人资料图像。 主要活动。JAVA
问题内容: 如何将以空格或逗号分隔的字符串传递给存储过程和过滤结果?我正在尝试做类似的事情- 然后是我要首先存储的过程 查找所有具有名字或姓氏的记录,例如key1 使用名字或姓氏(例如key2)过滤步骤1 使用名字或姓氏(如键3)过滤步骤2 另一个例子: 如果我搜索任何以下内容,则应返回每个内容? “ xyz开发人员”返回2行 “ xyz abc”返回1行 “ abc开发者”返回1行 “ hell
我将JSON数据从jQuery传递到我的Java控制器,我正在使用,但我得到一个异常说: 组织。springframework。网状物HttpMediaTypeNotSupportedException:内容类型'application/x-www-form-urlencoded;字符集=UTF-8'不受支持 我传递的数据是: 我用来传递此数据的AJAX调用是: 我的Java控制器如下所示 我的P