我已经为这个问题苦苦挣扎了2天…之前曾发布过,但没有答案是正确的。
我的问题是:我正在尝试将byte []转换为图像。byte []来自JSON,格式如下:
“ 4oCwUE5HDQoaCgAAAA1JSERSAAAAfwAAAFAIBgAAADBHwqrDsAAAAAlwSFlzAAAAJwAAACcBKgnigJhPAAAgAElEQVR4xZPCrMK9ecWSZcOZfcOfw7c5w5vCvW / CqXp行…”
显示图像的类:
public class PlayersListActivity extends Activity { // URL to make request private static String URL = "url goes here"; private static int userID; ArrayList<HashMap<String, Object>> playersList; ListView playerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list_view); Bundle extras = getIntent().getExtras(); userID = extras.getInt("id"); initLayout(); } private void initLayout() { playerView = (ListView) findViewById(R.id.list); playersList = new ArrayList<HashMap<String, Object>>(); playerView.setAdapter(new SimpleAdapter(PlayersListActivity.this, playersList, R.layout.activity_players_list, null, null)); playerView.setDividerHeight(0); } @Override protected void onResume() { if (!ConnectivityStatus.isNetworkAvailable(getApplicationContext())) { Toast.makeText(PlayersListActivity.this, R.string.network_failed, Toast.LENGTH_SHORT).show(); } else { playerView.setAdapter(null); new PlayersLoadTask().execute(); } super.onResume(); } ProgressDialog pDialog; class PlayersLoadTask extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(PlayersListActivity.this); pDialog.setMessage("Reading data"); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); playersList.clear(); } @Override protected String doInBackground(String... arg0) { try { ArrayList<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>(); parameters.add(new BasicNameValuePair("request", "getPlayers")); parameters.add(new BasicNameValuePair("clubid", Integer.toString(userID))); // TODO: you'll need to change this to the Id from the user DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(PlayersListActivity.URL); httpPost.setEntity(new UrlEncodedFormEntity(parameters, "UTF-8")); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); // if this is null the web service returned an empty page if(httpEntity == null) // response is empty so exit out return null; String jsonString = EntityUtils.toString(httpEntity); // again some simple validation around the returned string if(jsonString != null && jsonString.length() != 0) // checking string returned from service to grab id { JSONArray jsonArray = new JSONArray(jsonString); for(int i=0; i< jsonArray.length(); i++) { HashMap<String, Object> map = new HashMap<String, Object>(); JSONObject jsonObject = (JSONObject) jsonArray.get(i); int id = jsonObject.getInt("id"); String name = jsonObject.getString("name"); byte[] image = jsonObject.getString("image").getBytes(); String base64 = jsonObject.getString("image"); try { BitmapFactory.Options op=new BitmapFactory.Options(); op.inSampleSize=8; Bitmap yourSelectedImage = BitmapFactory.decodeByteArray(image,0,image.length); ByteArrayOutputStream baos = new ByteArrayOutputStream(); yourSelectedImage.compress(Bitmap.CompressFormat.PNG, 100, baos); //this will convert image to byte[] byte[] byteArrayImage = baos.toByteArray(); // this will convert byte[] to string String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT); if (encodedImage != null) { ImageView imgView = (ImageView) findViewById(R.id.image); imgView.setImageBitmap(yourSelectedImage); } } catch (Exception e) { Log.d("Exception", e.toString()); } //map.put("id", id); map.put("image", base64.toString()); map.put("name", name); //Log.d("JSON OBJECTS:", jsonObject.toString()); //Log.d("WHATS IN MAP:", map.toString()); playersList.add(map); } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } catch (Exception e) { Log.e("ERROR SOMEWHERE!!!! " , e.toString()); } return null; } protected void onPostExecute(String file_url) { if(playersList.size() == 0 ) { Toast.makeText(PlayersListActivity.this, "No players in a list" , Toast.LENGTH_SHORT).show(); } else { playerView.setAdapter(new PlayerListAdapter (PlayersListActivity.this, playersList, R.layout.activity_players_list, new String[] {"id", "image", "name"}, new int[] {R.id.player_list_id, R.id.image, R.id.name, })); } pDialog.dismiss(); } }
}
和LogCat:
D/skia(3513): --- SkImageDecoder::Factory returned null D/skia(3513): --- SkImageDecoder::Factory returned null E/BitmapFactory(4399): Unable to decode stream: java.io.FileNotFoundException: /4oCwUE5HDQoaCgAAAA1JSERSAAAAfwAAAFAIBgAAADBHwqrDsAAAAAlwSFlzAAAAJwAAACcBKgnigJhPAAAgAElEQVR4xZPCrMK9ecWSZcOZfcOfw7c5w5vCvW/CqXpLV...
我根本不知道为什么我的位图返回null。我尝试了许多不同的方法,但是没有任何效果。
这就是为什么我急需帮助!谢谢!!!
备查
JSONArray jsonArray = new JSONArray(jsonString); for (int i = 0; i < jsonArray.length(); i++) { HashMap<String, Object> map = new HashMap<String, Object>(); JSONObject jsonObject = (JSONObject) jsonArray.get(i); int id = jsonObject.getInt("id"); String name = jsonObject.getString("name"); byte[] byteArray = Base64.decode(jsonObject.getString("image"), Base64.DEFAULT) ; Bitmap bmp1 = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); //Bitmap bitmap = Bitmap.createScaledBitmap(bmp1, 120, 120, false); map.put("id", id); map.put("name", name); map.put("image", bmp1); playersList.add(map); //Log.d("SHOW PLAYER LIST: " ,playersList.toString()); }