2016-12-17 42 views
0

我在logcat中出现这个错误,当我尝试上传图片格罗姆画廊。当我直接从相机上传图片时,效果很好。下面是我的代码JavaBinder FAILED BINDER TRANSACTION

public class OfflineMerchantRegisterActivity extends AppCompatActivity { 

EditText edtUsername, edtPassword, edtConfirmPassword, edtEmail, edtMobile, edtServiceType, edtName, edtAddress, edtCity; 
Button btnRegister, btnSelectImage, btnSelectCity, btnSelectType; 
ImageView imgMerchant; 
String offline_service_type; 
LinearLayout layoutCity, layoutServiceType; 
EditText edtService; 
String service; 

String username, password, confirmPassword, email, mobile, serviceType, name, address, city; 

Context context; 
private String userChoosenTask; 

private static final int CAMERA_REQUEST = 1888; 
private static final int GALLERY_REQUEST = 2; 

Bitmap imageBitmap; 

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

    context=OfflineMerchantRegisterActivity.this; 

    edtUsername = (EditText) findViewById(R.id.edtUsername); 
    edtPassword = (EditText) findViewById(R.id.edtPassword); 
    edtConfirmPassword = (EditText) findViewById(R.id.edtConfirmPassword); 
    edtEmail = (EditText) findViewById(R.id.edtEmail); 
    edtMobile = (EditText) findViewById(R.id.edtMobile); 
    edtServiceType = (EditText) findViewById(R.id.edtServiceType); 
    edtName = (EditText) findViewById(R.id.edtName); 
    edtAddress = (EditText) findViewById(R.id.edtAddress); 
    edtCity = (EditText) findViewById(R.id.edtCity); 
    edtService = (EditText) findViewById(R.id.edtService); 
    edtService.setText("Offline Merchant"); 

    btnRegister = (Button) findViewById(R.id.btnRegister); 
    btnSelectImage = (Button) findViewById(R.id.btnSelectImage); 
    btnSelectCity = (Button) findViewById(R.id.btnSelectCity); 
    btnSelectType = (Button) findViewById(R.id.btnSelectType); 

    imgMerchant = (ImageView) findViewById(R.id.imgMerchant); 

    layoutCity = (LinearLayout) findViewById(R.id.layoutCity); 
    layoutServiceType = (LinearLayout) findViewById(R.id.layoutServiceType); 

    btnSelectCity.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(OfflineMerchantRegisterActivity.this, MerchantCityActivity.class); 
      startActivityForResult(intent, 3); 
     } 
    }); 

    btnSelectType.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(OfflineMerchantRegisterActivity.this, OfflineServiceTypeListActivity.class); 
      startActivityForResult(intent, 1); 
     } 
    }); 

    layoutServiceType.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     } 
    }); 

    layoutCity.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     } 
    }); 

    btnRegister.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (isValid()){ 
       //registerOfflineMerchant(); 
       Intent intent = new Intent(OfflineMerchantRegisterActivity.this, OfflineMerchantConfirmActivity.class); 
       intent.putExtra("username", edtUsername.getText().toString()); 
       intent.putExtra("password", edtPassword.getText().toString()); 
       intent.putExtra("email", edtEmail.getText().toString()); 
       intent.putExtra("mobile", edtMobile.getText().toString()); 
       intent.putExtra("serviceType", edtServiceType.getText().toString()); 
       intent.putExtra("name", edtName.getText().toString()); 
       intent.putExtra("address", edtAddress.getText().toString()); 
       intent.putExtra("city", edtCity.getText().toString()); 

       if (imageBitmap!=null){ 
        intent.putExtra("imageString", getStringImage(imageBitmap)); 
        intent.putExtra("fileName", username+".png"); 
       } 
       else { 
        //do nothing 
       } 
       intent.putExtra("service", edtService.getText().toString()); 

       startActivity(intent); 
      } 
     } 
    }); 

    btnSelectImage.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      /* Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(intent, 2);*/ 
      selectImage(); 
     } 
    }); 
} 

public boolean isValidMail(String email) { 
    // TODO Auto-generated method stub 
    boolean isValid = false; 

    String expression = "^[\\w\\.-][email protected]([\\w\\-]+\\.)+[A-Z]{2,4}$"; 
    CharSequence inputStr = email; 

    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE); 
    Matcher matcher = pattern.matcher(inputStr); 
    if (matcher.matches()) { 
     isValid = true; 
    } 
    return isValid; 
} 

public boolean isValid(){ 

    username = edtUsername.getText().toString().trim(); 
    name = edtName.getText().toString().trim(); 
    password = edtPassword.getText().toString().trim(); 
    confirmPassword = edtConfirmPassword.getText().toString().trim(); 
    email = edtEmail.getText().toString().trim(); 
    mobile = edtMobile.getText().toString().trim(); 
    serviceType = edtServiceType.getText().toString().trim(); 
    address = edtAddress.getText().toString().trim(); 
    city = edtCity.getText().toString().trim(); 
    service = edtService.getText().toString().trim(); 

    if (username.length() <=0){ 
     Toast.makeText(OfflineMerchantRegisterActivity.this, "Please Enter Username", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    if (name.length() <=0){ 
     Toast.makeText(OfflineMerchantRegisterActivity.this, "Please Enter Name", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    if (password.length() <=0){ 
     Toast.makeText(OfflineMerchantRegisterActivity.this, "Please Enter Password", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    if (confirmPassword.length() <=0){ 
     Toast.makeText(OfflineMerchantRegisterActivity.this, "Please Enter Password Again", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    if (!(password.equals(confirmPassword))) { 
     Toast.makeText(this, "Passwords Mismatch", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    if (email.length() <=0){ 
     Toast.makeText(OfflineMerchantRegisterActivity.this, "Please Enter Email", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    if (!isValidMail(email)) { 
     Toast toast = Toast.makeText(this, "Please Enter Valid Email", Toast.LENGTH_SHORT); 
     toast.show(); 
     return false; 
    } 

    if (mobile.length() <=9){ 
     Toast.makeText(OfflineMerchantRegisterActivity.this, "Please Enter Mobile Number", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    if (serviceType.length() <=0){ 
     Toast.makeText(OfflineMerchantRegisterActivity.this, "Please Select Service Type", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    if (address.length() <=0){ 
     Toast.makeText(OfflineMerchantRegisterActivity.this, "Please Enter Address", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    if (city.length() <=0){ 
     Toast.makeText(OfflineMerchantRegisterActivity.this, "Please Select City", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    if (service.length() <= 0){ 
     Toast.makeText(OfflineMerchantRegisterActivity.this, "Please Enter As Offline Service", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    return true; 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == 1) { 
      offline_service_type = data.getStringExtra("offlineServiceType"); 
      edtServiceType.setText(offline_service_type); 
     } 

     if (resultCode == Activity.RESULT_OK){ 
      if (requestCode == 3){ 
       city = data.getStringExtra("city"); 
       edtCity.setText(city); 
      } 
     } 


     if (resultCode == RESULT_OK && null != data) { 

      if (requestCode == GALLERY_REQUEST) { 
       Uri URI = data.getData(); 
       String[] FILE = {MediaStore.Images.Media.DATA}; 
       Cursor cursor = getContentResolver().query(URI, FILE, null, null, null); 
       cursor.moveToFirst(); 
       int columnIndex = cursor.getColumnIndex(FILE[0]); 
       String imageDecode = cursor.getString(columnIndex); 
       cursor.close(); 
       imageBitmap = BitmapFactory.decodeFile(imageDecode); 
       ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
       imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
       imgMerchant.setImageBitmap(imageBitmap); 
       //uploadImageToServer(getStringImage(bmp), username); 

      } else if (requestCode == CAMERA_REQUEST) { 
       imageBitmap = (Bitmap) data.getExtras().get("data"); 
       ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
       imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 

       File destination = new File(Environment.getExternalStorageDirectory(), 
         System.currentTimeMillis() + ".jpg"); 

       FileOutputStream fo; 
       try { 
        destination.createNewFile(); 
        fo = new FileOutputStream(destination); 
        fo.write(bytes.toByteArray()); 
        fo.close(); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       imgMerchant.setImageBitmap(imageBitmap); 
       //uploadImageToServer(getStringImage(thumbnail), username); 
      } 
     } 
    } 
} 


public String getStringImage(Bitmap bmp) { 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.JPEG, 90, outputStream); 
    byte[] imageBytes = outputStream.toByteArray(); 
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
    return encodedImage; 
} 


@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
     case Utility.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       if (userChoosenTask.equals("Take Photo")) 
        cameraIntent(); 
       else if (userChoosenTask.equals("Choose from Library")) 
        galleryIntent(); 
      } else { 
       //code for deny 
      } 
      break; 
    } 
} 


private void selectImage() { 
    final CharSequence[] items = {"Take Photo", "Choose from Library", 
      "Cancel"}; 

    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle("Add Photo"); 
    builder.setItems(items, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 
      boolean result = Utility.checkPermission(context); 
      if (items[item].equals("Take Photo")) { 
       userChoosenTask = "Take Photo"; 
       if (result) 
        cameraIntent(); 

      } else if (items[item].equals("Choose from Library")) { 
       userChoosenTask = "Choose from Library"; 
       if (result) 
        galleryIntent(); 

      } else if (items[item].equals("Cancel")) { 
       dialog.dismiss(); 
      } 
     } 
    }); 
    builder.show(); 
} 


private void galleryIntent() { 

    Intent intent = new Intent(Intent.ACTION_PICK, 
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

    startActivityForResult(intent, GALLERY_REQUEST); 

    //startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE); 
} 

private void cameraIntent() { 

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, CAMERA_REQUEST); 

} 


public void onBackPressed() { 
    OfflineMerchantRegisterActivity.this.finish(); 
    super.onBackPressed(); 

} 

}

如何解决这个问题?从图库中选择图片后,应用程序崩溃错误。

回答

1

这个错误大多发生在您填写意图的数据超过系统能够通过Intent捆绑传输时。查看您要放入捆绑包中的所有东西的大小。并且检查您从图库中选择的图像不是很大,因为系统可能无法将图像从图库传输到您的应用程序。相机代码正在工作,因为相机应用程序通过意图传输低分辨率图像。

+0

是否可以从图库中降低所选图像的大小? @Samvid Mistry? –

+0

你不应该断定这个错误是因为来自画廊的图像,这个问题可能也是别的。我建议您创建另一个项目,并查看一个关于从库中获取图像的正确在线教程,然后正确地实现代码,然后将该代码与当前代码进行比较,以查看失败的原因。 –