java.lang.IllegalArgumentException: invalid type for value: class android.graphics.Bitmap
java.lang.IllegalArgumentException: invalid type for value: class android.graphics.Bitmap
你好,我正在向parse平台添加一个位图文件,但是在开始时遇到了一些问题,一开始它能正常工作,但在第二次或第三次尝试后就出问题了。我猜这是因为put方法不能接收位图。但我不知道为什么它在一开始能正常工作,然后停止工作。\n这是我的代码...\n
package com.example.mac.mycarapp.UI; import android.support.v7.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.annotation.Nullable; import android.support.v4.content.FileProvider; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.ScrollView; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import android.support.v7.widget.Toolbar; import com.example.mac.mycarapp.Adapter.DatosCompletosOtroAdapterSearch; import com.example.mac.mycarapp.Adapter.RecyclerTouchListener; import com.example.mac.mycarapp.LoginActivity; import com.example.mac.mycarapp.Modelos.Ciudad; import com.example.mac.mycarapp.R; import com.example.mac.mycarapp.Util.Config; import com.example.mac.mycarapp.Util.MarshMallowPermission; import com.parse.FindCallback; import com.parse.GetCallback; import com.parse.GetDataCallback; import com.parse.ParseException; import com.parse.ParseFile; import com.parse.ParseObject; import com.parse.ParseQuery; import com.parse.ParseUser; import com.parse.SaveCallback; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import de.hdodenhof.circleimageview.CircleImageView; public class DatosCompletosClienteOtro extends AppCompatActivity implements AdapterView.OnItemSelectedListener { @BindView(R.id.imagen_por_tipo_de_empresa) ImageView imagenPorTipoDeEmpresa; @BindView(R.id.circleImageView3) CircleImageView circleImageView3; @BindView(R.id.inscripcion_nombre_cliente_otro) EditText inscripcionNombreClienteOtro; @BindView(R.id.inscripcion_cedula_cliente_otro) EditText inscripcionCedulaClienteOtro; @BindView(R.id.inscripcion_correo_cliente_otro) EditText inscripcionCorreoClienteOtro; @BindView(R.id.inscripcion_telefono_cliente_otro) EditText inscripcionTelefonoClienteOtro; @BindView(R.id.inscripcion_direccion_cliente_otro) EditText inscripcionDireccionClienteOtro; @BindView(R.id.inscripcion_ciudad_cliente_otro) Spinner inscripcionCiudadClienteOtro; @BindView(R.id.boton_seleccion_automotriz_otro) Button botonSeleccionAutomotriz; @BindView(R.id.boton_seleccion_inmobiliaria_otro) Button botonSeleccionInmobiliaria; @BindView(R.id.datos_completos_usuario_seleccion_empresa) TextView datosCompletosUsuarioSeleccionEmpresa; @BindView(R.id.datos_completos_buscar_empresa_por_sector) SearchView datosCompletosBuscarEmpresaPorSector; @BindView(R.id.recyclerview_relacion_escoge_empresa) RecyclerView recyclerviewRelacionEscogeEmpresa; @BindView(R.id.scrollView2) ScrollView scrollView2; ParseUser user; @BindView(R.id.boton_guardar_usuario_otro) Button botonGuardarUsuarioOtro; private ArrayListlistCiudad; private List ciudadList; private Ciudad ciudadSelect; String stringTipoDeEmpresa; private ArrayList listaEmpresa; DatosCompletosOtroAdapterSearch adapter; Context context = DatosCompletosClienteOtro.this; AlertDialog pd; String empresaObjectId; String tipoDeEmpAuto = "Automotriz"; String tipoDeEmpInmo = "Inmobiliaria"; Uri imageUrl; int CAMERA = 0; int GALLERY = 1; private MarshMallowPermission mmp; String ciudadId; String referentCiudad="null"; String spinnerValue; public static final int REQUEST_IMAGE=100; public static final int REQUEST_GALLERY=101; Bitmap bitmap; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.datos_completos_usuario_inmobiliaria); ButterKnife.bind(this); ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); mmp = new MarshMallowPermission(this); listCiudad = new ArrayList (); ciudadList = new ArrayList (); listaEmpresa = new ArrayList (); AlertDialog.Builder db = new AlertDialog.Builder(this); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View dialogView = inflater.inflate(R.layout.alert_inicial_uno, null); db.setView(dialogView); db.setCancelable(true); db.setPositiveButton("Siguiente", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { pd.dismiss(); } }); pd = db.create(); pd.show(); showUserDetailsIfInDatabase(); user = ParseUser.getCurrentUser(); //Todo:LLenar spinner con ciudades inscripcionCiudadClienteOtro.setOnItemSelectedListener(this); datosCompletosBuscarEmpresaPorSector.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String s) { return false; } @Override public boolean onQueryTextChange(String s) { adapter.getFilter().filter(s); return true; } }); circleImageView3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openOptionPhotografy(); } }); recyclerviewRelacionEscogeEmpresa.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerviewRelacionEscogeEmpresa, new RecyclerTouchListener.ClickListener() { @Override public void onClick(View view, int position) { ParseObject item = listaEmpresa.get(position); String empresaSeleccion = item.getString("Nombre"); empresaObjectId = item.getObjectId(); user = ParseUser.getCurrentUser(); user.put("Empresa", ParseObject.createWithoutData("Empresa", empresaObjectId)); } @Override public void onLongClick(View view, int position) { } })); botonSeleccionAutomotriz.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { datosCompletosUsuarioSeleccionEmpresa.setText(""); datosCompletosUsuarioSeleccionEmpresa.setText(tipoDeEmpAuto); // ParseQuery query = ParseQuery.getQuery("Empresa"); // // // Retrieve the object by id // query.getInBackground(empresaObjectId, new GetCallback () { // public void done(ParseObject entity, ParseException e) { // if (e == null) { // // Update the fields we want to // entity.put("tipoDeEmpresa", tipoDeEmpAuto); // } // } // }); stringTipoDeEmpresa = datosCompletosUsuarioSeleccionEmpresa.getText().toString().trim(); queryListadoDeEmpresas(stringTipoDeEmpresa); } }); botonSeleccionInmobiliaria.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { datosCompletosUsuarioSeleccionEmpresa.setText(""); datosCompletosUsuarioSeleccionEmpresa.setText(tipoDeEmpInmo); // ParseQuery query = ParseQuery.getQuery("Empresa"); // // // Retrieve the object by id // query.getInBackground(empresaObjectId, new GetCallback () { // public void done(ParseObject entity, ParseException e) { // if (e == null) { // // Update the fields we want to // entity.put("tipoDeEmpresa", tipoDeEmpInmo); // } // } // }); stringTipoDeEmpresa = datosCompletosUsuarioSeleccionEmpresa.getText().toString().trim(); queryListadoDeEmpresas(stringTipoDeEmpresa); } }); botonGuardarUsuarioOtro.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateProfileUser(); Intent intent=new Intent(DatosCompletosClienteOtro.this,MainActivity.class); startActivity(intent); } }); } @Override public boolean onOptionsItemSelected(MenuItem item) { Intent myIntent = new Intent(getApplicationContext(), LoginActivity.class); startActivityForResult(myIntent,0); return true; } private void lleneCiudadCliente(final String parameter) { ParseQuery parseQuery = ParseQuery.getQuery("Ciudad"); parseQuery.findInBackground(new FindCallback () { @Override public void done(List objects, ParseException e) { for (ParseObject ciudades : objects) { Ciudad ciudad = new Ciudad(ciudades.getObjectId(), ciudades.getString("Ciudad")); ciudadList.add(ciudad); listCiudad.add(ciudades.getString("Nombre")); } ArrayAdapter adapter = new ArrayAdapter (DatosCompletosClienteOtro.this, android.R.layout.simple_spinner_dropdown_item, listCiudad); inscripcionCiudadClienteOtro.setAdapter(adapter); if (!parameter.equals("null")) { int selectionPosition = adapter.getPosition(parameter); inscripcionCiudadClienteOtro.setSelection(selectionPosition); } } }); } @Override public void onItemSelected(AdapterView> adapterView, View view, int position, long id) { spinnerValue= adapterView.getItemAtPosition(position).toString(); String idValue= String.valueOf(adapterView.getSelectedItemId()); String item= listCiudad.get(position); ciudadSelect = ciudadList.get(position); ciudadId=ciudadSelect.getId(); // switch (adapterView.getId()) { // case R.id.inscripcion_ciudad_cliente: // ciudadSelect = ciudadList.get(position); // ciudadId=ciudadSelect.getId(); // break; // // } } @Override public void onNothingSelected(AdapterView> parent) { } private void showUserDetailsIfInDatabase() { ParseUser parseUser = ParseUser.getCurrentUser(); if (parseUser != null) { if (parseUser.getString("Nombre") != null) { inscripcionNombreClienteOtro.setText(parseUser.getString("Nombre")); Log.i("nombre:", parseUser.getString("Nombre")); } if(parseUser.getString("Cedula") != null) { inscripcionCedulaClienteOtro.setText(parseUser.getString("Cedula")); } if(parseUser.getEmail()!=null) { inscripcionCorreoClienteOtro.setText(parseUser.getEmail()); } if(parseUser.getNumber("Telefono")!=null) { inscripcionTelefonoClienteOtro.setText(parseUser.getInt("Telefono") + ""); } if(parseUser.getString("Direccion")!=null) { inscripcionDireccionClienteOtro.setText(parseUser.getString("Direccion")); } ParseQuery query = ParseUser.getQuery(); query.whereEqualTo("objectId", ParseUser.getCurrentUser().getObjectId()); query.setCachePolicy(ParseQuery.CachePolicy.NETWORK_ELSE_CACHE); query.include("Ciudad"); query.include("Marca"); query.findInBackground(new FindCallback () { public void done(final List objects, ParseException e) { if (e == null) { Log.d("Resultados ", "" + objects.size()); for (ParseObject pointer : objects) { ParseObject ciudades = pointer.getParseObject("Ciudad"); if (ciudades != null) { lleneCiudadCliente(ciudades.getString("Nombre")); } else { lleneCiudadCliente("null"); } } } } }); ParseFile parseFile = parseUser.getParseFile("Avatar"); if (parseFile != null) { parseFile.getDataInBackground(new GetDataCallback() { @Override public void done(byte[] data, ParseException e) { if (e == null) { Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length); if (bmp != null) { circleImageView3.setImageBitmap(bitmap); } } } }); } } } private void updateProfileUser() { if (datosCompletosUsuarioSeleccionEmpresa.getText().toString().matches("") ) { Config.simpleAlert("Porfavor seleccione un tipo de empresa", this); } if (inscripcionNombreClienteOtro.getText().toString().matches("") || inscripcionCedulaClienteOtro.getText().toString().matches("") || inscripcionTelefonoClienteOtro.getText().toString().matches("") || inscripcionDireccionClienteOtro.getText().toString().matches("") ) { Config.simpleAlert("Debe ingresar sus datos de perfil", this); } else { Config.showDP("Guardando registros...", this); ParseUser currUser = ParseUser.getCurrentUser(); currUser.put("Nombre", inscripcionNombreClienteOtro.getText().toString().trim()); currUser.put("Cedula", inscripcionCedulaClienteOtro.getText().toString().trim()); currUser.put("email", inscripcionCorreoClienteOtro.getText().toString().trim()); currUser.put("Telefono", Integer.parseInt(inscripcionTelefonoClienteOtro.getText().toString().trim())); currUser.put("Direccion", inscripcionDireccionClienteOtro.getText().toString().trim()); currUser.put("Ciudad", ParseObject.createWithoutData("Ciudad", ciudadId)); currUser.saveInBackground(); // Bitmap bitmap = ((BitmapDrawable) circleImageView3.getDrawable()).getBitmap(); // Bitmap bm = Config.scaleBitmapToMaxSize(240, bitmap); // ByteArrayOutputStream stream = new ByteArrayOutputStream(); // bm.compress(Bitmap.CompressFormat.JPEG, 100, stream); // byte[] bytesArray = stream.toByteArray(); // ParseFile imageFile = new ParseFile("image.jpg", bytesArray); // currUser.put("Avatar", imageFile); // currUser.saveInBackground(); // currUser.saveInBackground(new SaveCallback() { // @Override // public void done(ParseException e) { // // if (e == null) { // // Config.hidePD(); // Config.simpleAlert("Datos guardados correctamente", DatosCompletosClienteOtro.this); // } else { // Toast.makeText(DatosCompletosClienteOtro.this, e.getMessage(), Toast.LENGTH_SHORT).show(); // Config.hidePD(); // } // } // }); } } private void queryListadoDeEmpresas(String stringTipoDeEmpresa) { ParseQuery query = ParseQuery.getQuery("Empresa"); query.whereEqualTo("tipoDeEmpresa", stringTipoDeEmpresa); query.include("Ciudad"); query.findInBackground(new FindCallback () { @Override public void done(List objects, ParseException e) { for (ParseObject obj : objects ) { listaEmpresa.add(obj); } recyclerviewRelacionEscogeEmpresa.addItemDecoration(new DividerItemDecoration(getApplicationContext(), LinearLayoutManager.VERTICAL)); // Pass results to ListViewAdapter Class recyclerviewRelacionEscogeEmpresa.setLayoutManager(new LinearLayoutManager(getApplicationContext())); adapter = new DatosCompletosOtroAdapterSearch(getBaseContext(), listaEmpresa); // Binds the Adapter to the ListView recyclerviewRelacionEscogeEmpresa.setAdapter(adapter); adapter.notifyDataSetChanged(); } }); } private void openOptionPhotografy() { android.support.v7.app.AlertDialog.Builder alert = new android.support.v7.app.AlertDialog.Builder(DatosCompletosClienteOtro.this); alert.setTitle("Seleccione una opción") .setIcon(R.mipmap.ic_launcher_round) .setItems(new CharSequence[]{"Tomar fotografía", "Seleccionar de galería"}, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int which) { switch (which) { case 0: if (!mmp.checkPermissionForCamera()) { mmp.requestPermissionForCamera(); } else { openCameraIntent(); } break; case 1: if (!mmp.checkPermissionForReadExternalStorage()) { mmp.requestPermissionForReadExternalStorage(); } else { openImageGallery(); } break; } } }) .setNegativeButton("Cancelar", null); alert.show(); } // @Override // protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { // super.onActivityResult(requestCode, resultCode, data); // // if (resultCode == Activity.RESULT_OK) { // Bitmap bm = null; // //Image from camera // if (requestCode == CAMERA) { // try { // bm = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUrl); // // // } catch (IOException e) { // e.printStackTrace(); // } // // } else if (requestCode == GALLERY) { // try { // bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData()); // // } catch (IOException e) { // e.printStackTrace(); // } // } // //set image // circleImageView3.setImageBitmap(bm); // ParseUser currentUser = ParseUser.getCurrentUser(); // if (currentUser != null) { // // Other attributes than "email" will remain unchanged! // currentUser.put("Avatar", bm); // currentUser.saveInBackground(); // //mm // } // } // } private void openCameraIntent(){ Intent pictureIntent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if(pictureIntent.resolveActivity(getPackageManager())!=null){ startActivityForResult(pictureIntent,REQUEST_IMAGE); } } private void openImageGallery(){ Intent photoPickerIntent=new Intent(Intent.ACTION_PICK); File pictureDirectory=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); String picDirectoryPath=pictureDirectory.getPath(); Uri data=Uri.parse(picDirectoryPath); photoPickerIntent.setDataAndType(data,"image/*"); startActivityForResult(photoPickerIntent,REQUEST_GALLERY); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode== REQUEST_IMAGE && resultCode==RESULT_OK){ if(data!=null && data.getExtras()!=null ){ bitmap=(Bitmap)data.getExtras().get("data"); circleImageView3.setImageBitmap(bitmap); user.put("Avatar",bitmap); user.saveInBackground(); } } if(requestCode==REQUEST_GALLERY && resultCode==RESULT_OK){ Uri imageUri=data.getData(); InputStream inputStream; try { inputStream=getContentResolver().openInputStream(imageUri); Bitmap image=BitmapFactory.decodeStream(inputStream); circleImageView3.setImageBitmap(image); user.put("Avatar",image); user.saveInBackground(); } catch (FileNotFoundException e) { e.printStackTrace(); Toast.makeText(this,"No fue posible abrir la imagen",Toast.LENGTH_LONG).show(); } } } }
\n问题出在这里:user.put(\"Avatar\",bitmap);\n这是错误代码...\n
2019-07-08 14:58:41.798 1734-27078/? E/OMXNodeInstance: getConfig(0xee426d80:google.vorbis.decoder, ConfigAndroidVendorExtension(0x6f100004)) ERROR: Undefined(0x80001001) 2019-07-08 14:58:41.988 30043-30043/com.example.mac.mycarapp E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.mac.mycarapp, PID: 30043 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.example.mac.mycarapp/com.example.mac.mycarapp.UI.DatosCompletosClienteOtro}: java.lang.IllegalArgumentException: invalid type for value: class android.graphics.Bitmap at android.app.ActivityThread.deliverResults(ActivityThread.java:4360) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402) at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by: java.lang.IllegalArgumentException: invalid type for value: class android.graphics.Bitmap at com.parse.ParseObject.performPut(ParseObject.java:3034) at com.parse.ParseObject.put(ParseObject.java:3013) at com.parse.ParseUser.put(ParseUser.java:814) at com.example.mac.mycarapp.UI.DatosCompletosClienteOtro.onActivityResult(DatosCompletosClienteOtro.java:564) at android.app.Activity.dispatchActivityResult(Activity.java:7454) at android.app.ActivityThread.deliverResults(ActivityThread.java:4353) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402) at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 2019-07-08 14:58:42.209 1915-1999/system_process E/InputDispatcher: channel '53feb7f com.example.mac.mycarapp/com.example.mac.mycarapp.UI.DatosCompletosClienteOtro (server)' ~ Channel is unrecoverably broken and will be disposed!
\n那么我该怎么办?请帮帮我...
在代码中,出现了"java.lang.IllegalArgumentException: invalid type for value: class android.graphics.Bitmap"这个异常。这个异常通常出现在尝试保存一个位图(Bitmap)对象时。
出现这个异常的原因是,代码中尝试将位图对象保存到文件中,而不是保存文件本身。这是因为在代码中,开发者注释掉了保存文件的代码,而不小心保存了位图对象。
要解决这个问题,需要将注释掉的保存文件的代码恢复,并删除保存位图对象的代码。这样,就能正确地将文件保存到指定位置。
下面是一种可能的解决方法:
// 保存文件的代码 File file = new File("/path/to/save/image.jpg"); try { FileOutputStream fos = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); }
通过恢复保存文件的代码,并删除保存位图对象的代码,就能解决"java.lang.IllegalArgumentException: invalid type for value: class android.graphics.Bitmap"这个异常。这样,就能正确地将文件保存到指定位置,而不会再出现异常。
这个问题的出现是因为在使用parseplatform的ParseUser类的put方法存储数据时,不能直接存储Bitmap类型的数据。解决方法是将Bitmap存储到文件系统中,然后将文件路径存储到ParseUser对象中。当需要显示图片时,通过获取文件路径,从存储中读取图片。
可以使用以下代码将Bitmap转换为byte数组:
ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 80, stream); byte[] byteArray = stream.toByteArray();
然后,按照提供的链接中的方式,将byte数组存储为ParseFile对象,再将ParseFile对象存储到ParseUser中。
至于你提到的CircleImageView显示问题,我不清楚具体原因。