2015-05-06 128 views
-2

我無法將圖像發送到服務器。我試圖這樣:我點擊按鈕,選擇圖像,然後圖像應該上傳到服務器。請給我一個教訓或教程如何將圖像發送到服務器。也許我做錯了什麼。下面我的錯誤:無法將圖像發送到服務器(OutOfMemoryError,android)

05-06 10:45:47.578: E/AndroidRuntime(21361): FATAL EXCEPTION: main 
05-06 10:45:47.578: E/AndroidRuntime(21361): java.lang.OutOfMemoryError 
05-06 10:45:47.578: E/AndroidRuntime(21361): at java.lang.String.<init>(String.java:432) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:642) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at java.lang.StringBuilder.toString(StringBuilder.java:663) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at libcore.net.UriCodec.encode(UriCodec.java:134) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at java.net.URLEncoder.encode(URLEncoder.java:57) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at org.apache.http.client.utils.URLEncodedUtils.encode(URLEncodedUtils.java:184) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at org.apache.http.client.utils.URLEncodedUtils.format(URLEncodedUtils.java:163) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at org.apache.http.client.entity.UrlEncodedFormEntity.<init>(UrlEncodedFormEntity.java:71) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at com.example.uploadimagetoserver.MainActivity.onActivityResult(MainActivity.java:96) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at android.app.Activity.dispatchActivityResult(Activity.java:4663) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at android.app.ActivityThread.deliverResults(ActivityThread.java:3131) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3178) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at android.app.ActivityThread.access$1100(ActivityThread.java:134) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at android.os.Looper.loop(Looper.java:154) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at android.app.ActivityThread.main(ActivityThread.java:4624) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at java.lang.reflect.Method.invokeNative(Native Method) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at java.lang.reflect.Method.invoke(Method.java:511) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
05-06 10:45:47.578: E/AndroidRuntime(21361): at dalvik.system.NativeStart.main(Native Method) 

這是我的主類:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     button1 = (Button) findViewById(R.id.button1); 

     //get image path 
     button1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
       photoPickerIntent.setType("image/*"); 
       final int SELECT_PHOTO = 1234; 
       startActivityForResult(photoPickerIntent, SELECT_PHOTO); 
      } 
     }); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
     super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
     switch(requestCode) { 
     case 1234: 
      //if ok upload image 
      if(resultCode == RESULT_OK){ 
       Uri selectedImage = imageReturnedIntent.getData(); 
       String[] filePathColumn = {MediaStore.Images.Media.DATA}; 

       Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
       cursor.moveToFirst(); 

       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       String filePath = cursor.getString(columnIndex); 
       String selectedImageName = selectedImage.getLastPathSegment(); 
       cursor.close(); 

       Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath); 


       HttpClient httpclient = new DefaultHttpClient(); 
       //working link 
       HttpPost httppost = new HttpPost("http://crm.pavlun.info/api/upload_photo"); 

       try { 
        if(yourSelectedImage != null) { 

         ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
         yourSelectedImage.compress(CompressFormat.JPEG, 100, bos); 
         byte[] data = bos.toByteArray(); 
         String file = Base64.encodeToString(data, Base64.DEFAULT); 

         List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(7); 

         nameValuePairs.add(new BasicNameValuePair("image", file)); 
         httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
         httpclient.execute(httppost); 

         ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
         String response = httpclient.execute(httppost, responseHandler); 

         Log.e("response", response); 
        } 

       }catch(Exception e) { 

       } 

      } 
     } 
+2

'請給我一個教訓或tutoria'。你不是第一個遇到這個問題的人。如果你谷歌這個網站,你會發現很多與解決方案類似的問題。簡短的回答不是使用Bitmap和BitmapFactory來上傳.jpg文件。只需上傳.jpg文件即可。 – greenapps

回答