Hey guys, i been having some trouble trying to figure this out. I'm able to manually set a drawable in the imageview in xml and that would upload with no issues during user registration. but as soon as i remove that source from the image view and user selcts profile pic to upload, app forcecloses. please check out my code below, any help would be greatly appreciated.
package com.darkkness.androiddeveloper.darknessensues.LoginActivity;
/**
* Created by arindam on 10/6/16.
*/
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatButton;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.darkkness.androiddeveloper.darknessensues.R;
import com.darkkness.androiddeveloper.darknessensues.NetworkCheck.NetworkCheck;
import com.parse.ParseException;
import com.parse.ParseFile;
import com.parse.ParseUser;
import com.parse.SaveCallback;
import com.parse.SignUpCallback;
import com.squareup.picasso.Picasso;
import java.io.ByteArrayOutputStream;
public class SignupActivity extends AppCompatActivity implements View.OnClickListener {
EditText etName, etEmail, etPassword;
AppCompatButton btnSignup;
ProgressDialog progressDialog;
ImageView profylpic;
private static int RESULT_LOAD_IMAGE = 1;
private static int SELECT_PICTURE = 1;
ParseFile file;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
profylpic = (ImageView) findViewById(R.id.ProfilePic);
etName = (EditText)findViewById(R.id.input_name);
etEmail = (EditText)findViewById(R.id.input_email);
etPassword = (EditText)findViewById(R.id.input_password);
btnSignup = (AppCompatButton)findViewById(R.id.btn_signup);
btnSignup.setOnClickListener(this);
profylpic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);
}
});
memberimage();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
//Get ImageURi and load with help of picasso
//Uri selectedImageURI = data.getData();
Picasso.with(SignupActivity.this).load(data.getData()).noPlaceholder().centerCrop().fit()
.into((ImageView) findViewById(R.id.ProfilePic));
}
}
}
private void memberimage() {
try {
Bitmap image = ((BitmapDrawable)profylpic.getDrawable()).getBitmap();
profylpic.setImageBitmap(image);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, stream);
final byte[] byteArray = stream.toByteArray();
file = new ParseFile("myimage.png", byteArray);
file.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (null == e)
signup();
}
});
}catch (Exception e) {
Log.e("YOUR_APP_LOG_TAG", "I got an error", e);
}
}
@Override
public void onClick(View v) {
if(v==btnSignup)
{
signup();
}
}
public void signup() {
final String name = etName.getText().toString();
final String email = etEmail.getText().toString();
final String password = etPassword.getText().toString();
if(NetworkCheck.isNetworkAvailable(this)) {
if (validate()) {
progressDialog = ProgressDialog.show(this, "", getString(R.string.dialog_msg), true);
final ParseUser user = new ParseUser();
user.put("Name", name);
user.setUsername(email);
user.setEmail(email);
user.setPassword(password);
user.put("ProfilePic", file);
user.signUpInBackground(new SignUpCallback() {
public void done(ParseException e) {
if (e == null) {
Toast.makeText(getApplicationContext(), getResources().getString(R.string.account_created), Toast.LENGTH_SHORT).show();
finish();
}
else {
Toast.makeText(getApplicationContext(),
"Sign up Error", Toast.LENGTH_LONG)
.show();
Log.e("YOUR_APP_LOG_TAG", "I got an error", e);
}
}
});
progressDialog.dismiss();
}
}else
{
Toast.makeText(getApplicationContext(), getResources().getString(R.string.noInternet), Toast.LENGTH_SHORT).show();
}
}
public boolean validate() {
boolean valid = true;
String name = etName.getText().toString();
String email = etEmail.getText().toString();
String password = etPassword.getText().toString();
if (name.isEmpty() || name.length() < 3) {
etName.setError("at least 3 characters");
valid = false;
} else {
etName.setError(null);
}
if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
etEmail.setError("enter a valid email address");
valid = false;
} else {
etEmail.setError(null);
}
if (password.isEmpty() || password.length() < 4 || password.length() > 10) {
etPassword.setError("between 4 and 10 alphanumeric characters");
valid = false;
} else {
etPassword.setError(null);
}
return valid;
}
}
08-16 17:51:23.191 5064-5064/com.darkkness.androiddeveloper.darknessensues E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.darkkness.androiddeveloper.darknessensues, PID: 5064
java.lang.IllegalArgumentException: value may not be null.
at com.parse.ParseObject.performPut(ParseObject.java:2860)
at com.parse.ParseObject.put(ParseObject.java:2851)
at com.parse.ParseUser.put(ParseUser.java:424)
at com.darkkness.androiddeveloper.darknessensues.LoginActivity.SignupActivity.signup(SignupActivity.java:152)
at com.darkkness.androiddeveloper.darknessensues.LoginActivity.SignupActivity.onClick(SignupActivity.java:129)
at android.view.View.performClick(View.java:5702)
at android.widget.TextView.performClick(TextView.java:10888)
at android.view.View$PerformClick.run(View.java:22533)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)