我正在尝试调用我创建的用于将Bitmap转换为Base64字符串的方法,并且由于某种原因,encode()方法对我不起作用。
这是我创建的将图像转换为字节数组的方法:
public byte[] getImageBytes() {
byte[] picBytes = null;
try{
//ImageButton ppView = (ImageButton) findViewById(R.id.icon);
String base64 = profileMap.get("WHOOZNEAR_PROFILEPIC");
picBytes = Base64.decode(base64, Base64.DEFAULT); //works with android 2.2 and higher
//byte[] picBytes = Base64.decode(base64);
//Bitmap bitmap = BitmapFactory.decodeByteArray(picBytes, 0, picBytes.length);
//if (bitmap != null )
//ppView.setImageBitmap(bitmap);
}
catch (Exception e)
{
Log.e(TAG, "unhandled exception when attempting to set profile image");
//Toast.makeText(getBaseContext(), "No profile image selected", Toast.LENGTH_LONG).show();
}
return picBytes;
}
这是我创建的将位图转换为Base64字符串的方法:
public String BitMapToString(Bitmap bitmap){
String temp = "";
Bitmap temp_Bitmap = bitmap;
if (temp_Bitmap != null) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
temp_Bitmap.compress(Bitmap.CompressFormat.PNG, 0, baos);
byte[] b=baos.toByteArray();
temp=Base64.encodeToString(getImageBytes(), Base64.DEFAULT);
}
catch(Exception e){
Log.e(LOG_TAG,"[ONACTIVITYRESULT] Could not bind input to the bytearray: " + e.getMessage());
}
}
return temp;
}
这是整个文件:
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Set;
import java.util.Map.Entry;
/*import javax.jmdns.ServiceEvent;
import javax.jmdns.ServiceInfo;*/
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ProfileActivity extends Activity {
private static final int NEAR = Menu.FIRST;
private final static String LOG_TAG = ProfileActivity.class.getSimpleName();
//ServiceInfo info = null;
private static final String TAG = "ProfileActivity";
protected LinkedHashMap<String, String> profileMap;
protected static ArrayList<Entry<String, String>> profileArrayList;
private Set<Entry<String, String>> profileSet;
//private Context context;
protected static final boolean D = false;
protected static byte[] input;
protected ListView profileList;
private TextView nameView;
private TextView tagLineView;
protected ProfileAdapter customAdapter;
private ImageButton buttonReturnToNearby;
private TextView screenNameView;
private Profile profile = new Profile();
private Bitmap profBitmap;
protected static class ProfileAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public ProfileAdapter(Context context ) {
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return profileArrayList.size();
}
public Object getItem(int arg0) {
return profileArrayList.get(arg0);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// A ViewHolder keeps references to children views to avoid unnecessary calls
// to findViewById() on each row.
ViewHolder holder;
// When convertView is not null, we can reuse it directly, there is no need
// to reinflate it. We only inflate a new View when the convertView supplied
// by ListView is null.
if (convertView == null) {
convertView = mInflater.inflate(R.layout.peer_profile_row, null, false);
// Creates a ViewHolder and store references to the two children views
// we want to bind data to.
holder = new ViewHolder();
holder.propertyName = (TextView) convertView.findViewById(R.id.propertyName);
holder.propertyValue = (TextView) convertView.findViewById(R.id.propertyValue);
//TODO: Put a default view here or something if it is a phone or email
//holder.icon = (ImageView) convertView.findViewById();
convertView.setTag(holder);
} else {
// Get the ViewHolder back to get fast access to the TextView
// and the ImageView.
holder = (ViewHolder) convertView.getTag();
}
// Bind the data efficiently with the holder.
//TODO: Make this correct
holder.propertyName.setText( profileArrayList.get(position).getKey() );
holder.propertyValue.setText( profileArrayList.get(position).getValue() );
return convertView;
}
class ViewHolder {
TextView propertyName;
TextView propertyValue;
}
public boolean isEmpty() {
return profileArrayList.isEmpty();
}
};
/*
public void onStart(){
super.onStart();
if (D) {Log.i(TAG, "++++ ON START +++++"); }
}
*/
@Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile_display);
//if (D) {Log.i(TAG, "++++ ON CREATE +++++"); }
HashMap<String, String> temp = new HashMap<String, String>();
try
{
temp = (HashMap<String, String>) profileMap;
//THE LINE BELOW NEEDS TO BE UNCOMMENTED TO RECEIVE THE ATTRIBUTES 4/9/12
temp = (HashMap<String, String>) this.getIntent().getSerializableExtra("ProfileData");
temp = profile.getAllAttributesIncludingPicture();
profile.setTagLine(temp.get("TagLine"));
profile.setProfilePicStr(temp.get("WHOOZNEAR_PROFILEPIC"));
profile.setWhatIDo(temp.get("What I Do"));
}
catch (Exception e)
{
Log.e(TAG, "Runtime Exceptions suck");
}
if (temp != null) {
profileMap = new LinkedHashMap<String, String> (temp);
//profileMap = profile.getAllAttributesIncludingPicture();
}
else
{
Log.e(TAG, "temp HashMap is NULL");
}
setProfile(profile);
screenNameView = (TextView) findViewById(R.id.ab_screen_name);
screenNameView.setText("Peer Profile");
buttonReturnToNearby = (ImageButton) findViewById(R.id.btn_nearby);
buttonReturnToNearby.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
Log.e(TAG, "commented out call to WhoozNearActivity");
/*
if(profileMap.get("Name") != null && profileMap.get("Name").compareTo("Set a new value") != 0
&& profileMap.get("Age") != null && profileMap.get("Age").compareTo("Set a new value") != 0
&& profileMap.get("Looking") != null && profileMap.get("Looking").compareTo("Set a new value") != 0){
float age = Float.parseFloat(profileMap.get("Age"));
Intent mainIntent = new Intent(getBaseContext(), WhoozNearActivity.class);
startActivity(mainIntent);
//finish();
} else {
Toast.makeText(getBaseContext(), "Please, enter values for Name, Age and Looking", Toast.LENGTH_LONG).show();
}
*/
} catch (NumberFormatException nfe) {
nfe.printStackTrace();
Toast.makeText(getBaseContext(), "Value Age is not correct", Toast.LENGTH_LONG).show();
} catch (NullPointerException npe) {
npe.printStackTrace();
Toast.makeText(getBaseContext(), "Error", Toast.LENGTH_LONG).show();
}
}
});
setupAdapter();
setProfile(profile);
//updateProfileList(); //extra call to update is not required
setupViews();
Log.e(TAG, "profile map data after creation: " + profileMap);
//Log.e(TAG, "Get Profile Pic STR:"+getProfilePicStr());
//Log.e(TAG, "Get Image STR:"+getImageStr());
}
public void setProfile(Profile profile) {
this.profileMap = profile.getAllAttributes();
updateProfileList();
Log.e(TAG, "profile map data after setProfile: " + profileMap);
}
public String getTagline() {
return profileMap.get("TagLine");
}
public String getName() {
Log.e(TAG, "Got the NAME!");
return profileMap.get("Name");
}
/*public void setProfilePic() {
Log.e(TAG, "SET THE PROFILE PIC!!");
}*/
public LinkedHashMap<String, String> getProfileMap() {
return profileMap;
}
public void setupAdapter() {
customAdapter = new ProfileAdapter(this);
}
public void setupViews() {
if (profileList == null) {
profileList = (ListView) findViewById(R.id.profile_list);
profileList.setAdapter(customAdapter);
}
nameView = (TextView) findViewById(R.id.profileNameLine);
nameView.setText(profileMap.get("Name"));
tagLineView = (TextView) findViewById(R.id.profileTagLine);
tagLineView.setText(profileMap.get("TagLine"));
//try to set profile pic, otherwise use default
try{
ImageButton ppView = (ImageButton) findViewById(R.id.btn_whooznear);
String base64 = profileMap.get("WHOOZNEAR_PROFILEPIC");
//base64 = ConvertandSetImagetoBase64(profile.getSelectedImgPath());
//Log.e("LOG_TAG", "ProfileActivity Base64 String:"+base64);
//SET THE LOCAL PROFILE PIC STR
profile.setProfilePicStr(base64);
byte[] picBytes = Base64.decode(base64, Base64.DEFAULT); //works with android 2.2 and higher
//byte[] picBytes = Base64.decode(base64);
Bitmap bitmap = BitmapFactory.decodeByteArray(picBytes, 0, picBytes.length);
if (bitmap != null) {
setProfileBitmap(bitmap);
ppView.setImageBitmap(bitmap);
}
}
catch (Exception e)
{
Log.e(TAG, "unhandled exception when attempting to set profile image:" + e.getMessage());
Toast.makeText(getBaseContext(), "No profile image selected", Toast.LENGTH_LONG).show();
}
}
/*public String getImageStr() {
return profileMap.get("WHOOZNEAR_PROFILEPIC").toString();
}*/
/*public String getProfilePicStr() {
return profileMap.get("ProfilePic").toString();
}*/
/*public String ConvertandSetImagetoBase64(String imagePath) {
String base64 = null;
byte[] input = null;
try{
FileInputStream fd = new FileInputStream(imagePath);
Bitmap bmt = BitmapFactory.decodeFileDescriptor(fd.getFD());
try{
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap tmp = ProfileActivity.scaleDownBitmap(bmt, 10, this);
tmp.compress(Bitmap.CompressFormat.JPEG, 10, stream);
input = stream.toByteArray();
base64 = Base64.encodeToString(input, Base64.DEFAULT);
//LocalProfileActivity.input = input;
}catch(Exception e){
Log.e(LOG_TAG,"[ONACTIVITYRESULT] Could not bind input to the bytearray: " + e.getMessage());
}
}
catch (Exception e){
Log.e("LocalProfile", "Could not load selected profile image");
}
return base64;
}*/
public void setProfileBitmap(Bitmap profBitmap) {
this.profBitmap = profBitmap;
}
public Bitmap getProfileBitmap() {
return profBitmap;
}
public String GetBase64ImgString() {
String base64Str = Base64.encodeToString(getImageBytes(), Base64.DEFAULT);
return base64Str;
}
public String BitMapToString(Bitmap bitmap){
String temp = "";
Bitmap temp_Bitmap = bitmap;
if (temp_Bitmap != null) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
temp_Bitmap.compress(Bitmap.CompressFormat.PNG, 0, baos);
byte[] b=baos.toByteArray();
temp=Base64.encodeToString(getImageBytes(), Base64.DEFAULT);
}
catch(Exception e){
Log.e(LOG_TAG,"[ONACTIVITYRESULT] Could not bind input to the bytearray: " + e.getMessage());
}
}
return temp;
}
public Bitmap StringToBitMap(String encodedString){
try{
byte[] encodeByte=Base64.decode(encodedString,Base64.DEFAULT);
Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
return bitmap;
}catch(Exception e){
e.getMessage();
return null;
}
}
public byte[] getImageBytes() {
byte[] picBytes = null;
try{
//ImageButton ppView = (ImageButton) findViewById(R.id.icon);
String base64 = profileMap.get("WHOOZNEAR_PROFILEPIC");
picBytes = Base64.decode(base64, Base64.DEFAULT); //works with android 2.2 and higher
//byte[] picBytes = Base64.decode(base64);
//Bitmap bitmap = BitmapFactory.decodeByteArray(picBytes, 0, picBytes.length);
//if (bitmap != null )
//ppView.setImageBitmap(bitmap);
}
catch (Exception e)
{
Log.e(TAG, "unhandled exception when attempting to set profile image");
//Toast.makeText(getBaseContext(), "No profile image selected", Toast.LENGTH_LONG).show();
}
return picBytes;
}
public void updateProfileList() {
try
{
LinkedHashMap <String, String> temp = (LinkedHashMap<String, String>) profileMap.clone();
temp.remove("Name");
temp.remove("TagLine");
temp.remove("ProfileName");
profileSet = temp.entrySet();
}
catch(NullPointerException e)
{
e.printStackTrace();
Log.i(TAG, "exception in thread: updateProfileList() ... profile map: " + profileMap);
}
//Profile personfound = new Profile();
//personfound.addAttribute("age", info.getPropertyBytes("profilePic"));
//personfound.addAttribute("name", profileMap.get("name"));
//personfound.addAttribute("age", info.getPropertyString("age"));
//personfound.addAttribute("gender", info.getPropertyString("gender"));
//personfound.addAttribute("name", info.getPropertyString("name"));
//getProfile(personfound);
//profileArrayList = new ArrayList( Arrays.asList(profileArray) );
if (profileArrayList == null)
profileArrayList = new ArrayList();
else
profileArrayList.clear();
for (Entry<String, String> e : profileSet ) {
profileArrayList.add(e);
}
if (profileList != null)
if (profileList.getAdapter() != null)
customAdapter.notifyDataSetChanged();
Log.e(TAG, "profile map data after update: " + profileMap + profileMap.get("WHOOZNEAR_PROFILEPIC"));
}
public Profile getProfile(Profile profilePersonFound) {
return profilePersonFound;
}
public void onNameClick (View v) {
return;
}
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, NEAR, 0, "NearBy").setIcon(android.R.drawable.ic_menu_info_details);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case NEAR:
try {
/*if(profileMap.get("Name") != null && profileMap.get("Name").compareTo("Set a new value") != 0
&& profileMap.get("Age") != null && profileMap.get("Age").compareTo("Set a new value") != 0
&& profileMap.get("Looking") != null && profileMap.get("Looking").compareTo("Set a new value") != 0){
float age = Float.parseFloat(profileMap.get("Age"));
Intent mainIntent = new Intent(this, WhoozNearActivity.class);
startActivity(mainIntent);
//finish();
} else {
Toast.makeText(this, "Please, enter values for Name, Age and Looking", Toast.LENGTH_LONG).show();
}*/
String tagline = profileMap.get("TagLine");
/*NeighborViewModel nv = new NeighborViewModel();
nv.setNeighborDesc(profileMap.get("TagLine")); //Try setServiceDesc();
String name = profileMap.get("Name");
NeighborViewModel nv = null;
nv.setNeighborName(name);*/
Profile profile = new Profile();
profile.setProfileName(profileMap.get("Name"));
profile.setTagLine(profileMap.get("TagLine"));
if (profileMap.get("Name") != null) {
//Toast.makeText(this, "In If Statement", Toast.LENGTH_LONG).show();
//Toast.makeText(this, tagline, Toast.LENGTH_LONG).show();
//Intent Call
//Intent intent = new Intent(this, WhoozNearActivity.class);
//startActivity(intent);
//Pass the profile data so that it can be broadcasted in ConnectActivity.java
Intent myIntent = new Intent(ProfileActivity.this,
AndroidClient.class);
Toast.makeText(getBaseContext(), "In ProfileActivity", Toast.LENGTH_SHORT);
myIntent.putExtra("Props", profileMap);
startActivity(myIntent);
}
else {
Toast.makeText(this, "Please, enter values for Name", Toast.LENGTH_LONG).show();
}
} catch (NumberFormatException nfe) {
nfe.printStackTrace();
Toast.makeText(this, "Value Age is not correct", Toast.LENGTH_LONG).show();
} catch (NullPointerException npe) {
npe.printStackTrace();
Toast.makeText(this, "Error", Toast.LENGTH_LONG).show();
}
break;
}
return true;
}
Bitmap ShrinkBitmap(byte[] file, int width, int height){
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap bitmap;
int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)height);
int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)width);
if (heightRatio > 1 || widthRatio > 1)
{
if (heightRatio > widthRatio)
{
bmpFactoryOptions.inSampleSize = heightRatio;
} else {
bmpFactoryOptions.inSampleSize = widthRatio;
}
}
bmpFactoryOptions.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeByteArray(file, 0, file.length, bmpFactoryOptions);
return bitmap;
}
public static Bitmap scaleDownBitmap(Bitmap photo, int newHeight, Context context) {
final float densityMultiplier = context.getResources().getDisplayMetrics().density;
int h= (int) (newHeight*densityMultiplier);
int w= (int) (h * photo.getWidth()/((double) photo.getHeight()));
photo=Bitmap.createScaledBitmap(photo, w, h, true);
return photo;
}
}
这是ProfileDBUtilities.java中的getProfile()方法:
public Profile getProfile(int pId) {
Profile profile = null;
try {
// int profileID = pId;
// profileName = pName;
Cursor cursor = _activity.managedQuery(
ProfileDBObject.Profile.CONTENT_URI, new String[] {
ProfileDBObject.Profile._ID,
ProfileDBObject.Profile.NAME,
ProfileDBObject.Profile.PROFILE_NAME }, "_ID = '"
+ pId + "'", null, ProfileDBObject.Profile._ID);
profile = new Profile();
profile.setProfileId(pId);
cursor.moveToFirst();
int nameCol = cursor
.getColumnIndex(ProfileDBObject.Profile.PROFILE_NAME);
String profileName;
try {
profileName = cursor.getString(nameCol);
}
// If the profile ID doesn't exist, return the first profile in the
// DB
catch (Exception e) {
cursor = _activity.managedQuery(
ProfileDBObject.Profile.CONTENT_URI, new String[] {
ProfileDBObject.Profile._ID,
ProfileDBObject.Profile.NAME,
ProfileDBObject.Profile.PROFILE_NAME }, null,
null, ProfileDBObject.Profile._ID);
cursor.moveToFirst();
nameCol = cursor
.getColumnIndex(ProfileDBObject.Profile.PROFILE_NAME);
profileName = cursor.getString(nameCol);
}
profile.setProfileName(profileName);
cursor.close();
// Start grabbing the related attributes
cursor = _activity.managedQuery(
AttributeDBObject.Attribute.CONTENT_URI, new String[] {
AttributeDBObject.Attribute.ATTR_NAME,
AttributeDBObject.Attribute.ATTR_VALUE },
"PROFILE_ID = '" + pId + "'", null,
AttributeDBObject.Attribute._ID);
cursor.moveToFirst();
int aNameIndex = cursor
.getColumnIndex(AttributeDBObject.Attribute.ATTR_NAME);
int aValIndex = cursor
.getColumnIndex(AttributeDBObject.Attribute.ATTR_VALUE);
String aName;
String aValue;
// If there are attributes, add them to the profile
if (cursor.getCount() != 0) {
do {
aName = cursor.getString(aNameIndex);
aValue = cursor.getString(aValIndex);
profile.addAttribute(aName, aValue);
} while (cursor.moveToNext());
}
cursor.close();
} catch (Exception e) {
Log.e(LOG_TAG,"Error when getting profile from the db: " + e.getMessage());
}
return profile;
}
这是StackTrace:
08-15 07:34:37.141: I/ActivityThread(382): Pub com.iconnexus.client: com.iconnexus.client.ProfileProvider
08-15 07:34:37.351: D/dalvikvm(382): GC_EXTERNAL_ALLOC freed 57K, 53% free 2566K/5379K, external 1625K/2137K, paused 78ms
08-15 07:34:41.581: E/ProfileDBUtilities(382): Error when getting profile from the db: Index 0 requested, with a size of 0
08-15 07:34:41.651: E/ProfileActivity(382): profile map data after update: {}null
08-15 07:34:41.651: E/ProfileActivity(382): profile map data after setProfile: {}
08-15 07:34:41.651: E/ProfileActivity(382): profile map data after update: {}null
08-15 07:34:41.661: E/ProfileActivity(382): profile map data after setProfile: {}
08-15 07:34:41.671: E/ProfileActivity(382): unhandled exception when attempting to set profile image:null
08-15 07:34:41.711: E/ProfileActivity(382): profile map data after creation: {}
08-15 07:34:41.711: E/ProfileActivity(382): profile map data after update: {}null
08-15 07:34:41.721: E/ProfileActivity(382): profile map data after setProfile: {}
08-15 07:34:41.721: E/ProfileActivity(382): unhandled exception when attempting to set profile image:null
08-15 07:34:41.991: E/ProfileActivity(382): LocalProfileActivity profileJSON: {"nameValues":{},"profileId":13,"valid":false}
08-15 07:34:42.061: E/LocalProfile(382): ConvertandSetImagetoBase64: Could not load selected profile image
08-15 07:34:42.071: E/LocalProfile(382): ConvertandSetImagetoBase64: Could not load selected profile image
08-15 07:40:23.171: W/KeyCharacterMap(382): No keyboard for id 0
08-15 07:40:23.193: W/KeyCharacterMap(382): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
08-15 07:40:24.161: E/ProfileDBUtilities(382): Error when getting profile from the db: Index 0 requested, with a size of 0
08-15 07:40:24.161: E/ProfileActivity(382): profile map data after update: {}null
08-15 07:40:24.161: E/ProfileActivity(382): profile map data after setProfile: {}
08-15 07:40:24.592: E/ProfileActivity(382): profile map data after update: {}null
08-15 07:40:24.621: E/ProfileActivity(382): profile map data after setProfile: {}
08-15 07:40:24.621: E/ProfileActivity(382): profile map data after update: {}null
08-15 07:40:24.632: E/ProfileActivity(382): profile map data after setProfile: {}
08-15 07:40:24.641: E/ProfileActivity(382): unhandled exception when attempting to set profile image:null
08-15 07:40:24.691: E/ProfileActivity(382): profile map data after creation: {}
08-15 07:40:24.711: E/AndroidClient(382): Before initEventHandlers
08-15 07:40:24.711: E/AndroidClient(382): After initEventHandlers
08-15 07:40:24.721: E/AndroidClient(382): Local Profile Map is null from intent in ConnectActivity
08-15 07:40:25.101: E/AndroidClient(382): TAGLINE: null
08-15 07:40:25.101: E/AndroidClient(382): WHOOZNEAR PIC:null
08-15 07:40:25.111: E/AndroidClient(382): REGEX REPLACEALL:"Ryan"
08-15 07:40:25.111: E/AndroidClient(382): temp_Bitmap is NULL!!
08-15 07:40:25.141: E/ProfileActivity(382): unhandled exception when attempting to set profile image
08-15 07:40:25.141: D/AndroidRuntime(382): Shutting down VM
08-15 07:40:25.151: W/dalvikvm(382): threadid=1: thread exiting with uncaught exception (group=0x40015560)
08-15 07:40:25.181: E/AndroidRuntime(382): FATAL EXCEPTION: main
08-15 07:40:25.181: E/AndroidRuntime(382): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.iconnexus.client/com.iconnexus.client.AndroidClient}: java.lang.NullPointerException
08-15 07:40:25.181: E/AndroidRuntime(382): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
08-15 07:40:25.181: E/AndroidRuntime(382): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-15 07:40:25.181: E/AndroidRuntime(382): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-15 07:40:25.181: E/AndroidRuntime(382): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-15 07:40:25.181: E/AndroidRuntime(382): at android.os.Handler.dispatchMessage(Handler.java:99)
08-15 07:40:25.181: E/AndroidRuntime(382): at android.os.Looper.loop(Looper.java:123)
08-15 07:40:25.181: E/AndroidRuntime(382): at android.app.ActivityThread.main(ActivityThread.java:3683)
08-15 07:40:25.181: E/AndroidRuntime(382): at java.lang.reflect.Method.invokeNative(Native Method)
08-15 07:40:25.181: E/AndroidRuntime(382): at java.lang.reflect.Method.invoke(Method.java:507)
08-15 07:40:25.181: E/AndroidRuntime(382): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-15 07:40:25.181: E/AndroidRuntime(382): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-15 07:40:25.181: E/AndroidRuntime(382): at dalvik.system.NativeStart.main(Native Method)
08-15 07:40:25.181: E/AndroidRuntime(382): Caused by: java.lang.NullPointerException
08-15 07:40:25.181: E/AndroidRuntime(382): at android.util.Base64.encode(Base64.java:494)
08-15 07:40:25.181: E/AndroidRuntime(382): at android.util.Base64.encodeToString(Base64.java:456)
08-15 07:40:25.181: E/AndroidRuntime(382): at com.iconnexus.client.ProfileActivity.GetBase64ImgString(ProfileActivity.java:315)
08-15 07:40:25.181: E/AndroidRuntime(382): at com.iconnexus.client.AndroidClient.onCreate(AndroidClient.java:266)
08-15 07:40:25.181: E/AndroidRuntime(382): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-15 07:40:25.181: E/AndroidRuntime(382): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-15 07:40:25.181: E/AndroidRuntime(382): ... 11 more
08-15 07:40:27.442: I/Process(382): Sending signal. PID: 382 SIG: 9
答案 0 :(得分:0)
我认为问题出在您的BitMapToString(Bitmap bitmap)
方法中。
您将参数位图转换为字节数组(b),然后不使用它...
byte[] b=baos.toByteArray();
temp=Base64.encodeToString(getImageBytes(), Base64.DEFAULT);
可能你应该在b
方法中使用incodeToString
...所以它看起来应该是这样......
byte[] b=baos.toByteArray();
temp=Base64.encodeToString(b, Base64.DEFAULT);
简而言之,请勿在{{1}}方法中致电getImageBytes()
。
希望这会有所帮助......
如果您认为这回答了您的问题,请将其标记为“已接受”。这将提高您和我的声誉分数。