Java 上载映像时获取RuntimeException错误
我正在上传一张图片。当我在我的设备上从eclipse运行应用程序时,它运行良好,并且完全可以上传文件。当我关闭应用程序并从设备菜单启动它时,当我尝试上传图像时,它会给我RuntimeException错误。我不知道发生了什么事。请帮忙 这是我的密码Java 上载映像时获取RuntimeException错误,java,android,Java,Android,我正在上传一张图片。当我在我的设备上从eclipse运行应用程序时,它运行良好,并且完全可以上传文件。当我关闭应用程序并从设备菜单启动它时,当我尝试上传图像时,它会给我RuntimeException错误。我不知道发生了什么事。请帮忙 这是我的密码 public class Camera extends Activity { ImageView ivUserImage; Button bUpload; Intent i; int CameraResult = 0; Bitmap bmp; pub
public class Camera extends Activity {
ImageView ivUserImage;
Button bUpload;
Intent i;
int CameraResult = 0;
Bitmap bmp;
public String globalUID;
UserFunctions userFunctions;
String photoName;
InputStream is;
String largeImagePath;
int serverResponseCode = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
userFunctions = new UserFunctions();
globalUID = getIntent().getExtras().getString("globalUID");
Toast.makeText(getApplicationContext(), globalUID, Toast.LENGTH_LONG).show();
ivUserImage = (ImageView)findViewById(R.id.ivUserImage);
bUpload = (Button)findViewById(R.id.bUpload);
openCamera();
}
private void openCamera() {
i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, CameraResult);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK) {
//set image taken from camera on ImageView
Bundle extras = data.getExtras();
bmp = (Bitmap) extras.get("data");
ivUserImage.setImageBitmap(bmp);
//Create new Cursor to obtain the file Path for the large image
String[] largeFileProjection = {
MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.DATA
};
String largeFileSort = MediaStore.Images.ImageColumns._ID + " DESC";
Cursor myCursor = this.managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, largeFileProjection, null, null, largeFileSort);
try {
myCursor.moveToFirst();
//This will actually give you the file path location of the image.
largeImagePath = myCursor.getString(myCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
File f = new File("" + largeImagePath);
photoName = f.getName();
bUpload.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new Upload().execute(largeImagePath, globalUID, photoName);
}
});
} finally {
myCursor.close();
}
}
}
public class Upload extends AsyncTask<String, Integer, String> {
ProgressDialog dialog;
protected void onPreExecute() {
dialog = ProgressDialog.show(Camera.this, "", "Uploading file...", true);
}
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
String success = "false";
Bitmap bitmapOrg = BitmapFactory.decodeFile(largeImagePath);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);
byte [] ba = bao.toByteArray();
String ba1=Base64.encodeToString(ba, 0);
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("image",ba1));
nameValuePairs.add(new BasicNameValuePair("imageName", photoName));
nameValuePairs.add(new BasicNameValuePair("uid", globalUID));
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.example.info/android/fileupload.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if(response != null) {
success = "true";
}
is = entity.getContent();
} catch(Exception e) {
Log.e("log_tag", "Error in http connection "+e.toString());
}
dialog.dismiss();
return success;
}
protected void onProgressUpdate(Integer...progress) {
}
protected void onPostExecute(String f) {
Toast.makeText(getApplicationContext(), "File uploaded", Toast.LENGTH_LONG).show();
}
}
}
公共类摄影机扩展活动{
ImageView-ivUserImage;
巴普洛德;
意图一;
int CameraResult=0;
位图bmp;
公共字符串globalUID;
用户函数用户函数;
字符串名称;
输入流为;
字符串大图像路径;
int serverResponseCode=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
userFunctions=新的userFunctions();
globalUID=getIntent().getExtras().getString(“globalUID”);
Toast.makeText(getApplicationContext(),globalUID,Toast.LENGTH_LONG).show();
ivUserImage=(ImageView)findViewById(R.id.ivUserImage);
bUpload=(按钮)findviewbyd(R.id.bUpload);
openCamera();
}
私有void openCamera(){
i=新意图(android.provider.MediaStore.ACTION\u IMAGE\u CAPTURE);
startActivityForResult(i,CameraResult);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(resultCode==RESULT\u OK){
//在ImageView上设置从相机拍摄的图像
Bundle extras=data.getExtras();
bmp=(位图)附加获取(“数据”);
设置图像位图(bmp);
//创建新光标以获取大图像的文件路径
字符串[]大文件投影={
MediaStore.Images.ImageColumns.\u ID,
MediaStore.Images.ImageColumns.DATA
};
字符串largeFileSort=MediaStore.Images.ImageColumns.\u ID+“DESC”;
Cursor myCursor=this.managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,largeFileProjection,null,null,largeFileSort);
试一试{
myCursor.moveToFirst();
//这将实际为您提供图像的文件路径位置。
largeImagePath=myCursor.getString(myCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
文件f=新文件(“+largeImagePath”);
photoName=f.getName();
bUpload.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
新建上载().execute(大图像路径、globalUID、photoName);
}
});
}最后{
myCursor.close();
}
}
}
公共类上载任务{
进程对话;
受保护的void onPreExecute(){
dialog=ProgressDialog.show(Camera.this,,“上载文件…”,true);
}
@凌驾
受保护的字符串doInBackground(字符串…arg0){
//TODO自动生成的方法存根
字符串success=“false”;
位图bitmapOrg=BitmapFactory.decodeFile(大图像路径);
ByteArrayOutputStream bao=新建ByteArrayOutputStream();
压缩(Bitmap.CompressFormat.JPEG,90,bao);
字节[]ba=bao.toByteArray();
字符串ba1=Base64.encodeToString(ba,0);
ArrayList nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“图像”,ba1));
添加(新的BasicNameValuePair(“imageName”,photoName));
添加(新的BasicNameValuePair(“uid”,globalUID));
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://www.example.info/android/fileupload.php");
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
if(响应!=null){
success=“true”;
}
is=entity.getContent();
}捕获(例外e){
e(“Log_标记”,“http连接错误”+e.toString());
}
dialog.dismise();
回归成功;
}
受保护的void onProgressUpdate(整数…进度){
}
受保护的void onPostExecute(字符串f){
Toast.makeText(getApplicationContext(),“上传文件”,Toast.LENGTH_LONG.show();
}
}
}
这是我的日志
06-23 14:47:50.830: E/AndroidRuntime(7069): FATAL EXCEPTION: AsyncTask #4
06-23 14:47:50.830: E/AndroidRuntime(7069): java.lang.RuntimeException: An error occured while executing doInBackground()
06-23 14:47:50.830: E/AndroidRuntime(7069): at android.os.AsyncTask$3.done(AsyncTask.java:200)
06-23 14:47:50.830: E/AndroidRuntime(7069): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
06-23 14:47:50.830: E/AndroidRuntime(7069): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
06-23 14:47:50.830: E/AndroidRuntime(7069): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
06-23 14:47:50.830: E/AndroidRuntime(7069): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
06-23 14:47:50.830: E/AndroidRuntime(7069): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
06-23 14:47:50.830: E/AndroidRuntime(7069): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
06-23 14:47:50.830: E/AndroidRuntime(7069): at java.lang.Thread.run(Thread.java:1019)
06-23 14:47:50.830: E/AndroidRuntime(7069): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
06-23 14:47:50.830: E/AndroidRuntime(7069): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
06-23 14:47:50.830: E/AndroidRuntime(7069): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:573)
06-23 14:47:50.830: E/AndroidRuntime(7069): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:384)
06-23 14:47:50.830: E/AndroidRuntime(7069): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:412)
06-23 14:47:50.830: E/AndroidRuntime(7069): at com.zafar.login.Camera$Upload.doInBackground(Camera.java:122)
06-23 14:47:50.830: E/AndroidRuntime(7069): at com.zafar.login.Camera$Upload.doInBackground(Camera.java:1)
06-23 14:47:50.830: E/AndroidRuntime(7069): at android.os.AsyncTask$2.call(AsyncTask.java:185)
06-23 14:47:50.830: E/AndroidRuntime(7069): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
06-23 14:47:50.830: E/AndroidRuntime(7069): ... 4 more
06-23 14:47:56.280: E/WindowManager(7069): Activity com.zafar.login.DashboardActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40a67df0 that was originally added here
06-23 14:47:56.280: E/WindowManager(7069): android.view.WindowLeaked: Activity com.zafar.login.DashboardActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40a67df0 that was originally added here
06-23 14:47:56.280: E/WindowManager(7069): at android.view.ViewRoot.<init>(ViewRoot.java:266)
06-23 14:47:56.280: E/WindowManager(7069): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:174)
06-23 14:47:56.280: E/WindowManager(7069): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:117)
06-23 14:47:56.280: E/WindowManager(7069): at android.view.Window$LocalWindowManager.addView(Window.java:424)
06-23 14:47:56.280: E/WindowManager(7069): at android.app.Dialog.show(Dialog.java:241)
06-23 14:47:56.280: E/WindowManager(7069): at android.app.ProgressDialog.show(ProgressDialog.java:107)
06-23 14:47:56.280: E/WindowManager(7069): at android.app.ProgressDialog.show(ProgressDialog.java:90)
06-23 14:47:56.280: E/WindowManager(7069): at com.zafar.login.Camera$Upload.onPreExecute(Camera.java:115)
06-23 14:47:56.280: E/WindowManager(7069): at android.os.AsyncTask.execute(AsyncTask.java:391)
06-23 14:47:56.280: E/WindowManager(7069): at com.zafar.login.Camera$1.onClick(Camera.java:100)
06-23 14:47:56.280: E/WindowManager(7069): at android.view.View.performClick(View.java:2538)
06-23 14:47:56.280: E/WindowManager(7069): at android.view.View$PerformClick.run(View.java:9152)
06-23 14:47:56.280: E/WindowManager(7069): at android.os.Handler.handleCallback(Handler.java:587)
06-23 14:47:56.280: E/WindowManager(7069): at android.os.Handler.dispatchMessage(Handler.java:92)
06-23 14:47:56.280: E/WindowManager(7069): at android.os.Looper.loop(Looper.java:130)
06-23 14:47:56.280: E/WindowManager(7069): at android.app.ActivityThread.main(ActivityThread.java:3691)
06-23 14:47:56.280: E/WindowManager(7069): at java.lang.reflect.Method.invokeNative(Native Method)
06-23 14:47:56.280: E/WindowManager(7069): at java.lang.reflect.Method.invoke(Method.java:507)
06-23 14:47:56.280: E/WindowManager(7069): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
06-23 14:47:56.280: E/WindowManager(7069): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
06-23 14:47:56.280: E/WindowManager(7069): at dalvik.system.NativeStart.main(Native Method)
06-2314:47:50.830:E/AndroidRuntime(7069):致命异常:AsyncTask#4
06-23 14:47:50.830:E/AndroidRuntime(7069):java.lang.RuntimeException:执行doInBackground()时出错
06-23 14:47:50.830:E/AndroidRuntime(7069):在android.os.AsyncTask$3.done(AsyncTask.java:200)
06-23 14:47:50.830:E/AndroidRuntime(7069):在java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
06-23 14:47:50.830:E/AndroidRuntime(7069):在java.util.concurrent.FutureTask.setException(FutureTask.java:125)
06-23 14:47:50.830:E/AndroidRuntime(7069):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
06-23 14:47:50.830:E/AndroidRuntime(7069):在java.util.concurrent.FutureTask.run(FutureTask.java:138)
06-23 14:47:50.830:E/AndroidRuntime(7069):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
06-23 14:47:50.830:E/AndroidRuntime(7069):在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
06-23 14:47:50.830:E/AndroidRuntime(7069):在java.lang.Thread.run(Thread.java:1019)处
06-23 14:47:50.830:E/AndroidRuntime(7069):原因:java.lang.OutOfMemory错误:位图大小超出VM预算
06-23 14:47:50.830:E/AndroidRuntime(7069):在android.graphics.BitmapFactory.NativeDecodeseam(本机方法)
06-23 14:47:50.830:E/AndroidRuntime(7069):在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:573)
06-23 14:4