Java 上载映像时获取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

我正在上传一张图片。当我在我的设备上从eclipse运行应用程序时,它运行良好,并且完全可以上传文件。当我关闭应用程序并从设备菜单启动它时,当我尝试上传图像时,它会给我RuntimeException错误。我不知道发生了什么事。请帮忙

这是我的密码

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