我在尝试运行我的应用程序时收到了以下错误: FATAL EXCEPTION和OutOfMemoryError错误,并在下面包含了日志cat消息:
10-16 11:40:09.819: E/AndroidRuntime(668): FATAL EXCEPTION: Task.BACKGROUND_EXECUTOR-thread-13
10-16 11:40:09.819: E/AndroidRuntime(668): java.lang.OutOfMemoryError
10-16 11:40:09.819: E/AndroidRuntime(668): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
10-16 11:40:09.819: E/AndroidRuntime(668): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
10-16 11:40:09.819: E/AndroidRuntime(668): at com.parse.ParseIOUtils.copyLarge(ParseIOUtils.java:130)
10-16 11:40:09.819: E/AndroidRuntime(668): at com.parse.ParseIOUtils.copyLarge(ParseIOUtils.java:106)
10-16 11:40:09.819: E/AndroidRuntime(668): at com.parse.ParseIOUtils.copy(ParseIOUtils.java:81)
10-16 11:40:09.819: E/AndroidRuntime(668): at com.parse.ParseIOUtils.toByteArray(ParseIOUtils.java:55)
10-16 11:40:09.819: E/AndroidRuntime(668): at com.parse.ParseFileUtils.readFileToByteArray(ParseFileUtils.java:47)
10-16 11:40:09.819: E/AndroidRuntime(668): at com.parse.ParseFile.getCachedData(ParseFile.java:188)
10-16 11:40:09.819: E/AndroidRuntime(668): at com.parse.ParseFile.access$500(ParseFile.java:24)
10-16 11:40:09.819: E/AndroidRuntime(668): at com.parse.ParseFile$6.then(ParseFile.java:507)
10-16 11:40:09.819: E/AndroidRuntime(668): at com.parse.ParseFile$6.then(ParseFile.java:504)
10-16 11:40:09.819: E/AndroidRuntime(668): at com.parse.Task$10.run(Task.java:448)
10-16 11:40:09.819: E/AndroidRuntime(668): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
10-16 11:40:09.819: E/AndroidRuntime(668): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
10-16 11:40:09.819: E/AndroidRuntime(668): at java.lang.Thread.run(Thread.java:856)
以下活动开启时发生这种情况:
public class matchOptionActivity1 extends Activity{
protected TextView mUserRetrieved;
private String currentUserId;
protected TextView mUserActivityNameRetrieved;
protected TextView mUserNameRetrieved;
protected TextView mUserAgeRetrieved;
protected TextView mUserHeadlineRetrieved;
String userGender = ParseUser.getCurrentUser().getString("Gender");
String activityName = ParseUser.getCurrentUser().getString("ActivityName");
Number maxDistance = ParseUser.getCurrentUser().getNumber(
"Maximum_Distance");
String userLookingGender = ParseUser.getCurrentUser().getString(
"Looking_Gender");
Number minimumAge = ParseUser.getCurrentUser().getNumber("Minimum_Age");
Number maximumAge = ParseUser.getCurrentUser().getNumber("Maximum_Age");
Number userage = ParseUser.getCurrentUser().getNumber("UserAge");
private FeedbackDialog feedBack;
private ProgressDialog progressDialog;
private BroadcastReceiver receiver;
private MessageService.MessageServiceInterface sinchService;
private Boolean bound = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.matchoption);
feedBack = new FeedbackDialog(this, "AF-46D8F2A319EA-0A");
ParseQuery<ParseUser> query = ParseUser.getQuery();
// query.whereEqualTo("ActivityName",userActivitySelectionName);
query.whereNotEqualTo("objectId", ParseUser.getCurrentUser()
.getObjectId());
// users with Gender = currentUser.Looking_Gender
query.whereEqualTo("Gender", userLookingGender);
// users with Looking_Gender = currentUser.Gender
query.whereEqualTo("Looking_Gender", userGender);
query.setLimit(1);
// query2.whereEqualTo("UserMatchedRequest1", "confirmed");
query.whereEqualTo("ActivityName", activityName);
query.whereGreaterThanOrEqualTo("UserAge", minimumAge);
query.whereLessThanOrEqualTo("UserAge", maximumAge);
ParseQuery<ParseUser> query2 = ParseUser.getQuery();
// query.whereEqualTo("ActivityName",userActivitySelectionName);
query2.whereNotEqualTo("objectId", ParseUser.getCurrentUser()
.getObjectId());
// users with Gender = currentUser.Looking_Gender
query2.whereEqualTo("Gender", userLookingGender);
// users with Looking_Gender = currentUser.Gender
query2.whereEqualTo("Looking_Gender", userGender);
query2.setLimit(1);
// query2.whereEqualTo("UserMatchedRequest1", "confirmed");
query2.whereEqualTo("ActivityName", activityName);
query2.whereGreaterThanOrEqualTo("UserAge", minimumAge);
query2.whereLessThanOrEqualTo("UserAge", maximumAge);
query.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> objects,ParseException e) {
for(int i=0;i<objects.size();i++){
// Do whatever you need to extract object from "users"
ParseQuery<ParseObject> query = ParseQuery.getQuery("User");
query.whereNotEqualTo("objectId", ParseUser.getCurrentUser()
.getObjectId());
// users with Gender = currentUser.Looking_Gender
query.whereEqualTo("Gender", userLookingGender);
// users with Looking_Gender = currentUser.Gender
query.whereEqualTo("Looking_Gender", userGender);
query.setLimit(1);
// query2.whereEqualTo("UserMatchedRequest1", "confirmed");
query.whereEqualTo("ActivityName", activityName);
query.whereGreaterThanOrEqualTo("UserAge", minimumAge);
query.whereLessThanOrEqualTo("UserAge", maximumAge);
mUserNameRetrieved = (TextView) findViewById(R.id.tvmname1);
mUserNameRetrieved.setText(objects.get(i).get("Name").toString());
}
}//for loop
});
query2.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> objects,ParseException e) {
for(int i=0;i<objects.size();i++){
// Do whatever you need to extract object from "users"
ParseQuery<ParseObject> query2 = ParseQuery.getQuery("User");
query2.whereNotEqualTo("objectId", ParseUser.getCurrentUser()
.getObjectId());
// users with Gender = currentUser.Looking_Gender
query2.whereEqualTo("Gender", userLookingGender);
// users with Looking_Gender = currentUser.Gender
query2.whereEqualTo("Looking_Gender", userGender);
query2.setLimit(1);
// query2.whereEqualTo("UserMatchedRequest1", "confirmed");
query2.whereEqualTo("ActivityName", activityName);
query2.whereGreaterThanOrEqualTo("UserAge", minimumAge);
query2.whereLessThanOrEqualTo("UserAge", maximumAge);
ParseFile image = objects.get(i).getParseFile("ProfilePicture");
ParseImageView imageView = (ParseImageView) findViewById(R.id.profilePictureresultm);
// The placeholder will be used before and during the fetch, to be replaced by the fetched image
// data.
imageView.setPlaceholder(getResources().getDrawable(R.drawable.profile_pict));
imageView.setParseFile(image);
imageView.loadInBackground(new GetDataCallback() {
@Override
public void done(byte[] data, ParseException e) {
if (data != null) {
Log.i("ParseImageView", "Fetched: " + data.length);
} else {
Log.e("ParseImageView", "Error fetching: " + e.getMessage());
}
}
});
}
}//for loop
});
final Button ichat = (Button) this.findViewById(R.id.btnQuickChat);
ichat.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
openConversation();
}
private void openConversation() {
// TODO Auto-generated method stub
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereNotEqualTo("objectId", ParseUser.getCurrentUser()
.getObjectId());
// users with Gender = currentUser.Looking_Gender
query.whereEqualTo("Gender", userLookingGender);
// users with Looking_Gender = currentUser.Gender
query.whereEqualTo("Looking_Gender", userGender);
query.setLimit(1);
query.whereEqualTo("ActivityName", activityName);
query.whereGreaterThanOrEqualTo("UserAge", minimumAge);
query.whereLessThanOrEqualTo("UserAge", maximumAge);
query.findInBackground(new FindCallback<ParseUser>() {
public void done(List<ParseUser> user, ParseException e) {
if (e == null) {
Intent intent = new Intent(getApplicationContext(), MessagingActivity1.class);
Intent serviceIntent = new Intent(getApplicationContext(), MessageService.class);
startService(serviceIntent);
intent.putExtra("RECIPIENT_ID", user.get(0).getObjectId());
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(),
"Error finding that user",
Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
// show a loading spinner while the sinch client starts
private void showSpinner() {
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Loading");
progressDialog.setMessage("Please wait...");
progressDialog.show();
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Boolean success = intent.getBooleanExtra("success", false);
progressDialog.dismiss();
if (!success) {
Toast.makeText(getApplicationContext(),
"Messaging service failed to start",
Toast.LENGTH_LONG).show();
}
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(
receiver,
new IntentFilter(
"com.dooba.beta.MatchOptionActivity1"));
}
@Override
public void onResume() {
super.onResume();
}
}
非常感谢任何帮助
答案 0 :(得分:1)
好吧,您的异常发生在单独的主题上,我们无法直接在您的代码中看到错误的位置。
不过,它肯定发生在解析期间。
我想假设处理过的文件太大了
因此,请尝试注释掉行imageView.setParseFile(image)
或尝试使用其他图片文件
当您找到导致错误的地方时,您应该决定是否:
- 你必须限制图像的大小
- 转换图像以减小其尺寸
- 使用其他方法解析