- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将所选图像从Activity B 返回到Activity A list View
,如下图所示。但是有些图像无法从Activity B返回到A,即使我压缩了它们,我仍然得到
E/JavaBinder﹕ !!! FAILED BINDER TRANSACTION !!! Error.
Activity A ListView
Button addImage, submit;
Bitmap photo,bmp;
private void activeTakePhoto() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_LOAD_IMAGE:
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK & null != data) {
Uri selectedImage = data.getData();
try{
photo=MediaStore.Images.Media.getBitmap(getContentResolver(),selectedImage);
ByteArrayOutputStream stream =new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
bytes= stream.toByteArray();
bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
imageView.setImageBitmap(photo);
}catch(IOException e)
{
e.printStackTrace();
}
}
break;
submit.setOnClickListener(new View.OnClickListener() { //return value to Activity A
@Override
public void onClick(View v) {
Intent returnIntent = new Intent();
amount = Amount.getText().toString();
description = Description.getText().toString();
type = spinnerType.getSelectedItem().toString();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
returnIntent.putExtra("type", type);
returnIntent.putExtra("description", description);
returnIntent.putExtra("amount", amount);
returnIntent.putExtra("photo", bytes);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
});
Activity A
Bitmap ReceiveImage, photo;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { // receive from Activity B and populate ListView A
if (resultCode == RESULT_OK) {
if (requestCode == PROJECT_REQUEST_CODE) {
ReceiveType = data.getStringExtra("type");
ReceiveDescription = data.getStringExtra("description");
ReceiveAmount = data.getStringExtra("amount");
byte[] bytes = data.getByteArrayExtra("photo");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
if (mClickedPosition == -1) { // if icon clicked
if (obj != null)
obj.addNewItem(ReceiveType, ReceiveAmount, bmp, ReceiveDescription);
} else {
if (obj != null)
obj.changeItem(mClickedPosition, ReceiveType, ReceiveAmount, ReceiveImage, ReceiveDescription);
}
}
已编辑
Activity B
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_LOAD_IMAGE:
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK & null != data) {
selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver()
.query(selectedImage, filePathColumn, null, null,
null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
Bitmap a = (BitmapFactory.decodeFile(picturePath));
photo = scaleBitmap(a, 200, 150);
imageView.setImageBitmap(photo); // image looked blurry
}
break;
case REQUEST_IMAGE_CAPTURE:
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
String fileName = "tempimg.jpg";
try {
photo = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(photo);
} catch (Exception e) {
e.printStackTrace();
}
}
}
submit.setOnClickListener(new View.OnClickListener() { // return value and image to Activity A listView
@Override
public void onClick(View v) {
Intent returnIntent = new Intent();
amount = Amount.getText().toString();
description = Description.getText().toString();
type = spinnerType.getSelectedItem().toString();
returnIntent.putExtra("type", type);
returnIntent.putExtra("description", description);
returnIntent.putExtra("amount", amount);
returnIntent.putExtra("img_uri", selectedImage.toString());
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
});
Activity A
PicCustomBaseAdapter obj;
ArrayList<ImageAndText> images = new ArrayList<ImageAndText>();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { // receive from Activity B and populate ListView A
if (resultCode == RESULT_OK) {
if (requestCode == PROJECT_REQUEST_CODE) {
ReceiveType = data.getStringExtra("type");
ReceiveDescription = data.getStringExtra("description");
ReceiveAmount = data.getStringExtra("amount");
ReceiveImage = data.getParcelableExtra("photo");
Uri imgURI = Uri.parse(data.getStringExtra("img_uri"));
// Toast.makeText(getApplication(),ReceiveType+ReceiveAmount+ReceiveDescription+"",Toast.LENGTH_LONG).show();
if (mClickedPosition == -1) { // if icon clicked
if (obj != null)
obj.addNewItem(ReceiveType, ReceiveAmount, imgURI, ReceiveDescription);
} else {
//if (obj != null)
// obj.changeItem(mClickedPosition, ReceiveType, ReceiveAmount, ReceiveImage, ReceiveDescription);
}
}
}
}
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { // button is clicked
Toast.makeText(getApplicationContext(), a + "", Toast.LENGTH_LONG).show();
uploadImageAndText(images, lastID);
Intent intent = new Intent(getApplicationContext(), HomePage.class);
startActivity(intent);
}
});
public void uploadImageAndText(ArrayList<ImageAndText> listItems, final String id) {
JSONArray jsonArray = new JSONArray();
try {
for (ImageAndText i : listItems) {
JSONObject object = new JSONObject();
String type = i.getType();
String[] Type = type.split(":");
object.put("type", Type[1]);
Toast.makeText(getApplicationContext(), Type[1], Toast.LENGTH_LONG).show();
String amount = i.getAmount();
String[] Amount = amount.split(":");
object.put("amount", Amount[1]);
String description = i.getDescription();
String[] Description = description.split(":");
object.put("description", Description[1]);
Uri uploadImage = i.getImage();
imagess = getImage(uploadImage); // cannot resolved getImages
object.put("image", imagess);
object.put("ts_id", id);
jsonArray.put(object);
}
} catch (JSONException e) {
e.printStackTrace();
}
AddStaff ru = new AddStaff(jsonArray);
ru.execute();
}
class AddStaff extends AsyncTask<String, Void, String> {
ProgressDialog loading;
JSONArray jsonArray;
AddStaff(JSONArray jsonArray) {
this.jsonArray = jsonArray;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(AddClaims.this, "Please Wait", null, true, true);
}
@Override
protected String doInBackground(String... params) {
HashMap<String, String> data = new HashMap<String, String>();
data.put("listItems", jsonArray.toString());
data.put(Configs.KEY_IMAGE,imagess);
RequestHandler rh = new RequestHandler();
String result = rh.sendPostRequest(Configs.STAFF_BENEFIT, data);
return result;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
}
}
staffBenefit.php
<?php
if( $_SERVER['REQUEST_METHOD']=='POST' ){
if( !empty( $_POST['listItems'] ) ){
$mysqli = new mysqli("127.0.0.1:3307", "root", "", "androiddb");
if( $mysqli->connect_errno ) echo "Failed to connect to MySQL";
$image = $_POST['image'];
$listItems = json_decode( $_POST['listItems'], true );
$sql="SELECT id FROM staff_benefit ORDER BY id ASC";
$id=0;
$res=$mysqli->query( $sql );
while( $rs=$res->fetch_object() ) $id=$rs->id;
$path="$id.png";
$actualpath="http://192.168.107.115:80/Android/CRUD/PhotoUpload/$path";
$sql="INSERT INTO `staff_benefit` ( `type`, `amount`, `description`, `image`, `ts_id` ) VALUES ( ?, ?, ?, ?, ? )";
$stmt=$mysqli->prepare( $sql );
$pathelements=array( realpath( $_SERVER['DOCUMENT_ROOT'] ), 'CRUD', 'PhotoUpload', '' );
$savepath = realpath( implode( DIRECTORY_SEPARATOR, $pathelements ) ) . "{$id}.png";
$bytes=file_put_contents( $savepath, base64_decode( $image ) );
if( !$bytes ){
echo 'Error saving image';
}
if ( $stmt ) {
foreach( $listItems as $item ){
$stmt->bind_param('sssss', $item['type'], $item['amount'], $item['description'], $actualpath, $item['ts_id'] );
$res=$stmt->execute();
if( !$res ) echo 'Query failed with code: '.$stmt->errno;
}
}
$mysqli->close();
}
}
?>
最佳答案
Parcel用于使用 Intent
发送数据。如下所示:
If the arguments or the return value are too large to fit in the transaction buffer, then the call will fail and TransactionTooLargeException will be thrown.
The Binder transaction buffer has a limited fixed size, currently 1Mb...
因此,如果我们发送任何大图像的 byte
数组将导致 TransactionTooLargeException
。
要在两个应用程序组件之间发送图像,请使用图像 URI、图像路径、id...,而不是发送位图或字节数组。
在你的情况下这样做:
1. 使用 Intent 从 Activity B 向 A 发送 selectedImage
URI,该 URI 进入 onActivityResult
:
改变:
returnIntent.putExtra("photo", bytes);
到:
returnIntent.putExtra("img_uri", selectedImage.toString());
2. 在 Activity A 中从 Intent 获取 img_uri
作为字符串,然后将其解析为 URI。在 Activity A 的 onActivityResult
方法中:
改变:
byte[] bytes = data.getByteArrayExtra("photo");
到:
Uri imgURI = Uri.parse(data.getStringExtra("img_uri"));
3. 将 addNewItem
方法的第二个参数从 Bitmap
更改为 URI,并传递 imgURI
:
obj.addNewItem(ReceiveType, ReceiveAmount, imgURI, ReceiveDescription);
4. 在 ListView Adapter 中使用 setImageURI
为 ImageView 设置图像:
imageView.setImageURI(imgUri);
关于android - 仍然得到 E/JavaBinder:!!!失败的 BINDER 交易 !!!错误甚至图像已压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34715575/
我有一个自定义模型绑定(bind)器,它会为进入操作方法的特定参数调用: public override ActionResult MyAction(int someData, [ModelBinde
我正在尝试从服务下载图像并将其显示在 Activity 中,但我不断收到 java binder FAILED BINDER TRANSACTION 这是我的服务代码 public class Do
我有下一个问题,我正在创建自定义适配器的 ListView ,我正在使用异步任务从 JSON url(文本和图像 url)下载适配器的数据,然后我将适配器设置为列表,我使用毕加索库下载图像,现在我的应
我正在尝试将一个 UI 活页夹小部件包含到另一个小部件中:我正在使用 UI 活页夹构建一个表单,并希望包含一个也使用 UI 活页夹完成的精美按钮。有谁知道如何做到这一点? 谢谢! 最佳答案 是的,这是
我收到这个错误: Attempt to invoke interface method 'android.os.IBinder com.mediatek.anrappmanager.IFramewor
我想问一下有什么区别 bindConstant().annotatedWith(Names.named("keepAliveInterval")).to(60); 和 bind(Integer.TYP
我的应用程序已编译,然后在我的手机中安装 apk 时弹出窗口询问我新安装将卸载以前的版本,然后安装新版本。我点击了确定,但过了一会儿它显示了这个错误:- 01/14 10:43:22: Launchi
谁能告诉我这是什么意思? 一切都很好,我没有改变任何东西,只是发生了,这是 Binder 565 中的代码: try { res = onTransact(code, data, reply,
我的项目 application.properties 发出警告。说 'spring.cloud.stream.kafka.binder.jaas.loginModule' is an unknown
我读了一篇关于 android 的 Binder 的文章。文章说进程交换共享内存中的对象引用并且它比编码和解码更有效......但实际上IPC机制中是否存在编码和解码?我有点困惑... 谁能解释绑定(
在与 Oleg 讨论期间对问题进行了大量编辑 我正在尝试在 Spring Cloud Stream 中实现 BigQuery 的绑定(bind)器。 完整的应用程序代码可在GitHub上获取. 到目前
我有一个 Android Java 服务,它通过 Binder (AIDL) 与 native 进程交互。 我看到该服务列在“adb shell 服务列表”下。我也可以使用“adb shell ser
我创建了一个在单独进程中运行的服务 我读过,当服务作为单独的进程进行时,它是在一个单独的线程上而不是在主线程上。当我在服务中执行 HTTP 请求时,出现异常:Thread forbids Http
Android ContentProvider 使用“绑定(bind)线程”池来处理 RPC,例如 query、insert 和 call。在我的 ContentProvider 实现中,我正在执行一
我正在尝试阅读Android源代码来了解binder,但我无法找到Android系统架构中描述的binder驱动程序部分。知道 Binder 代码位于 Android 源代码中的什么位置吗? 最佳答案
08-27 22:17:20.980: INFO/AndroidRuntime(299): 注意:线程 'Binder Thread #3' 的附加失败这是 LogCat 信息,请帮助我。 最佳答案
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我已经用我的界面定义了一个 AIDL 文件。像这样: interface IResPlugin { int discoverType(); Map onClick( in int id
我正在做一个项目,我们向 android 系统添加了一些非标准的安全功能,但我在调整 Binder 时遇到了一些严重的问题。 有没有人对Binder系统有很深的了解,知道Binder为什么会“阻塞”一
我想我追踪到了内存泄漏,并想确认我认为 Android 的 Binder 是如何实现的。在这种情况下,我有一个服务和一个 Activity ,每个都在自己的进程中。我创建了一个 AIDL,它允许我通过
我是一名优秀的程序员,十分优秀!