我正在使用Quickblox聊天API开发聊天应用程序目前已经完成了用户注册,身份验证和基本的点对点聊天和群聊。现在正在实施视频,图像和文件发送但是已经在某些方面发生了变化。
从SD卡中选择图像。返回字符串中的图片路径,而不是转换为inputStream。在SOF上尝试了大约10-15个答案。我的代码如下:
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
protected void onActivityResult(int requestCode,int resultCode,Intent data){ super.onActivityResult(requestCode,resultCode,data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri 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 imagebitmap=BitmapFactory.decodeFile(picturePath);
byte[] b=picturePath.getBytes(Charset.forName("UTF-8"));
InputStream is = new ByteArrayInputStream(b);
File newFile = FileHelper.getFileInputStream(is, "sample.jpg", "myFile");
Boolean fileIsPublic = false;
QBContent.uploadFileTask(newFile, fileIsPublic, null, new QBEntityCallbackImpl<QBFile>()
{
public void onSuccess(QBFile file, Bundle params) {
//creating message
QBChatMessage chatmessage=new QBChatMessage();
chatmessage.setProperty("save_to_history", "1"); //saves messsage to history
QBAttachment qbAttachment=new QBAttachment("photo");
qbAttachment.setId(file.getId().toString());
chatmessage.addAttachment(qbAttachment);
try
{
chat.sendMessage(chatmessage);
Toast.makeText(getApplicationContext(), "Image Uploaded Successfully", Toast.LENGTH_SHORT).show();
} catch (XMPPException e) {
Log.e(TAG, "failed to send a image", e);
} catch (SmackException sme){
Log.e(TAG, "failed to send a image", sme);
}
}
public void onError(java.util.List<String> errors) {
AlertDialog.Builder dialog = new AlertDialog.Builder(ChatActivity.this);
dialog.setMessage("error when sending image: " + errors.toString()).create().show();
};});}
也试过这些代码来生成输入流
InputStream is = new ByteArrayInputStream(picturePath.toString()。getBytes(Charset.defaultCharset()));
try {
is = IOUtils.toInputStream(picturePath, "UTF-8");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
代码在myfile文件夹中生成新的sample.jpg。它没有创造。它坏了。但如果我选择静态,那么它的效果非常好。
谢谢你。不知道我做错了什么......任何帮助都会非常明显 我是
答案 0 :(得分:2)
ByteArrayOutputStream bos = new ByteArrayOutputStream();
imagebitmap.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] bitmapdata = bos.toByteArray();
ByteArrayInputStream bs = new ByteArrayInputStream(bitmapdata);
并将结果发送给我的函数....成功.. !!!