【发布时间】:2016-01-03 14:26:21
【问题描述】:
我的应用程序在半个月前运行良好,但现在我遇到了问题。 我无法在某些表格中将图像上传到 parse.com。仅在设备上存在问题,在模拟器应用程序上运行良好。 我正在尝试这段代码(从图库中选择图片):
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && data != null) {
String realPath;
// SDK < API11
if (Build.VERSION.SDK_INT < 11)
realPath = RealPathUtil.getRealPathFromURI_BelowAPI11(this, data.getData());
// SDK >= 11 && SDK < 19
else if (Build.VERSION.SDK_INT < 19)
realPath = RealPathUtil.getRealPathFromURI_API11to18(this, data.getData());
// SDK > 19 (Android 4.4)
else
realPath = RealPathUtil.getRealPathFromURI_API19(this, data.getData());
File file = new File(realPath);
try {
byte bytes[] = new byte[(int) file.length()];
BufferedInputStream bf = new BufferedInputStream(new FileInputStream(file));
bf.read(bytes, 0, bytes.length);
bf.close();
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
((ImageView) findViewById(R.id.setIMG)).setImageBitmap(bmp);
pFile = new ParseFile("file", bytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
之后,当用户点击特殊按钮时,执行以下代码:
void sendPost(String txt) throws ParseException {
String parseUserId = getIntent().getExtras().getString(ObjConst.OBJECT_ID);
ParseUser parseUser = null;
ParseQuery<ParseUser> queryUser = ParseUser.getQuery();
queryUser.whereEqualTo(ObjConst.OBJECT_ID, parseUserId);
try {
parseUser = queryUser.getFirst();
} catch (ParseException e) {
Log.e("INTERNET", "Problem with internet connection or can`t find your accaunt.");
}
if (parseUser != null) {
final ParseObject parseObject = new ParseObject(ObjConst.POST);
parseObject.put(ObjConst.POST_ANONIMOUS, checkBox.isChecked());
parseObject.put(ObjConst.POST_AUTHOR, parseUser);
parseObject.put(ObjConst.POST_TEXT, txt);
final Context ctx = this;
if (pFile != null) {
parseObject.put(ObjConst.POST_PHOTO, pFile);
Log.d("MY_TAG", "Start upload.");
pFile.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e != null) {
Log.d("MY_TAG", "ParseException: " + e.getMessage());
}
Log.d("MY_TAG", "Start save ParseObject");
saveParseObject(parseObject, ctx);
}
}, new ProgressCallback() {
@Override
public void done(Integer percentDone) {
Log.d("MY_TAG", percentDone+" %");
}
});
} else saveParseObject(parseObject, ctx);
}
}
void saveParseObject(ParseObject parseObject, final Context ctx) {
Log.d("MY_TAG", "Start saveParseObject()");
parseObject.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
Log.d("MY_TAG", e.getMessage());
Log.d("MY_TAG", "End. ParseObject saved. " + e.getMessage());
if (e != null)
Log.i("Write post.", "Can`t write post. Problem with internet connection.");
else Toast.makeText(ctx,
"Отправлено", Toast.LENGTH_SHORT).show();
}
});
}
程序的输出:
01-04 21:46:02.376 7360-7360/com.appserv D/MY_TAG: Start upload.
01-04 21:46:02.433 7360-7360/com.appserv D/MY_TAG: 58 %
01-04 21:46:02.434 7360-7360/com.appserv D/MY_TAG: 100 %
01-04 21:46:13.615 7360-7360/com.appserv D/MY_TAG: 58 %
01-04 21:46:13.618 7360-7360/com.appserv D/MY_TAG: 100 %
01-04 21:46:25.941 7360-7360/com.appserv D/MY_TAG: 58 %
01-04 21:46:25.945 7360-7360/com.appserv D/MY_TAG: 100 %
01-04 21:46:40.553 7360-7360/com.appserv D/MY_TAG: 58 %
01-04 21:46:40.557 7360-7360/com.appserv D/MY_TAG: 100 %
01-04 21:46:59.725 7360-7360/com.appserv D/MY_TAG: 58 %
01-04 21:46:59.730 7360-7360/com.appserv D/MY_TAG: 100 %
01-04 21:47:09.754 7360-7360/com.appserv D/MY_TAG: ParseException: i/o failure
01-04 21:47:09.754 7360-7360/com.appserv D/MY_TAG: Start save ParseObject
01-04 21:47:09.754 7360-7360/com.appserv D/MY_TAG: Start saveParseObject()
这是什么?)
【问题讨论】:
-
我会添加更多的日志语句。您没有任何迹象表明文件对象是否为空,或者文件保存失败,或者什么。
-
@nasch ,我在我的问题中添加了日志。该文件不为空,因为我将此图像设置为 ImageView 并正确显示。
-
我并不是要从 logcat 中粘贴不相关的东西,我的意思是在你的代码中添加一些调试语句,这样你就可以知道发生了什么。或者在调试器中单步执行。
-
@nasch,对不起。我重写了第二个代码。请检查一下。我写了我的应用程序的输出。
-
我看到的唯一问题是您没有从文件保存中检查
ParseException。如果那不为空,那么您将在那里遇到异常。检查一下,也许这会给你更多信息。
标签: java android parse-platform upload