gpt4 book ai didi

android - 以 java.net.SocketTimeoutException : null while saving data to Parse. com 结尾的 ParseObject.saveInBackground 方法

转载 作者:行者123 更新时间:2023-11-30 02:35:55 26 4
gpt4 key购买 nike

我检查了过去关于同一问题的帖子 ( saveinbackground-doesnt-work )。

我正在尝试让以下代码与 Parse.com 一起工作:

sendMessage.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
setProgressBarIndeterminateVisibility(false);
Log.d("Error","Completed Done");
if (e==null){
Toast.makeText(RecipientsActivity.this,"Message Sent!",Toast.LENGTH_LONG).show();
} else {
Log.d("TAG",e.getMessage());
Log.d("TAG",e.getCode() + "error code");

}
}
});

}

此 saveinBackground 方法执行时间过长,执行时会出现以下错误:i/o 失败:java.net.SocketTimeoutException:空100错误代码

我也在应用程序的其他部分使用 Parse,其中我从 Parse Core 获取用户联系信息。

消息是用于在 parse.com 上发布图片和视频的新类我正在使用以下代码创建 ParseObject:

protected ParseObject createMessage(){
ParseObject message = new ParseObject(ParseConstants.CLASS_MESSAGES);
message.put(ParseConstants.KEY_SENDER_ID,ParseUser.getCurrentUser().getObjectId());
message.put(ParseConstants.KEY_SENDER_NAME,ParseUser.getCurrentUser().getUsername());
message.put(ParseConstants.KEY_RECIPIENTS_ID,getRecipientsIDs());
message.put(ParseConstants.KEY_FILE_TYPE,fileType);
//Log.d("TAG1","Message: " + message);
//Log.d("TAG1",mediaUri + "");

byte[] fileBytes = FileHelper.getByteArrayFromFile(this,mediaUri);

if (fileBytes==null) return null;
else {
if (fileType.equals(ParseConstants.FILE_TYPE_IMAGE)){
fileBytes = FileHelper.reduceImageForUpload(fileBytes);

}
String fileName = FileHelper.getFileName(this,mediaUri,fileType);
ParseFile parseFile = new ParseFile(fileName,fileBytes);
message.put(ParseConstants.KEY_FILE,parseFile);
// Log.d("TAG2","Message: " + fileType);
// Log.d("TAG2",mediaUri + "");
return message;
}
}

我检查了日志,发现消息已正确创建。此外,我检查了 Parse.com 以查看是否在那里创建了任何消息类,但没有显示任何消息类。

我得到的错误是:

10-25 19:23:08.695  11405-11405 W/System.err﹕ com.parse.ParseException: Upload to S3 failed. Bad Request
10-25 19:23:08.695 11405-11405 W/System.err﹕ at com.parse.ParseAWSRequest.onResponse(ParseAWSRequest.java:94)
10-25 19:23:08.695 11405-11405/ W/System.err﹕ at com.parse.ParseAWSRequest.onResponse(ParseAWSRequest.java:28)
10-25 19:23:08.695 11405-11405/ W/System.err﹕ at com.parse.ParseRequest$3.call(ParseRequest.java:267)
10-25 19:23:08.695 11405-11405/ W/System.err﹕ at com.parse.Task$3.run(Task.java:199)
10-25 19:23:08.695 11405-11405/ W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
10-25 19:23:08.695 11405-11405/ W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
10-25 19:23:08.695 11405-11405/ W/System.err﹕ at java.lang.Thread.run(Thread.java:841)

在尝试调试错误后,我发现如果删除附加图像的代码,它就可以正常工作。所以我尝试了各种方法将图像转换为 Byte[],包括 image uri to byte arraysaving files to parse但我仍然没有找到任何运气

最佳答案

如果其他人在这里被击中:

我与我发送给解析的文件名以及我在创建文件时给文件的一次冲突导致出现了这个问题。

这是将图像转换为字节的问题,而不是解析端的错误。

转换为字节的代码(以下代码包含对 imageview 问题的修复):

 public byte[] readBytes(Uri uri) throws IOException {
/* // this dynamically extends to take the bytes you read
InputStream inputStream = getContentResolver().openInputStream(uri);
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();

// this is storage overwritten on each iteration with bytes
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];

// we need to know how may bytes were read to write them to the byteBuffer
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}

// and then we can return your byte array.
return byteBuffer.toByteArray();

*/
byte[] data = null;
try {
ContentResolver cr = getBaseContext().getContentResolver();
InputStream inputStream = cr.openInputStream(uri);
Bitmap bitmap;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;

options.outHeight = 50;
options.outWidth = 50;
options.inSampleSize = 8;
bitmap= BitmapFactory.decodeStream(inputStream,null,options);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
data = baos.toByteArray();
bitmap.recycle();
System.gc();
Runtime.getRuntime().gc();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return data;
}

关于android - 以 java.net.SocketTimeoutException : null while saving data to Parse. com 结尾的 ParseObject.saveInBackground 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26562949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com