我正在使用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 . 它没有创造 . 它坏了 . 但如果我选择静态,那么它的效果非常好 .
谢谢你 . 不知道我做错了什么......任何帮助都会非常明显2.我是
1 回答
经过大量的努力和代码改变,我完成了我所需要的 . 我没有使用inputstream,而是使用了ByteArrayInputStream . 首先将我的字符串picturepath转换为位图(不知道为什么我这样做..但确实如此)10使用以下代码将该位图转换为ByteArrayInputStream
并将结果发送给我的功能....成功.. !!!