Как отобразить изображение (байтовый массив) из JSON в imageView… Factory возвращает значение NULL
Я боролся с этой проблемой уже 2 дня ... Отправлял раньше, но ни один из ответов не был прав.
Моя проблема: яЯ пытаюсь конвертировать byte [] в изображение. Байт [] исходит из JSON, и это 'в этом формате: "
4oCwUE5HDQoaCgAAAA1JSERSAAAAfwAAAFAIBgAAADBHwqrDsAAAAAlwSFlzAAAAJwAAACcBKgnigJhPAAAgAElEQVR4xZPCrMK9ecWSZcOZfcOfw7c5w5vCvW / CqXp ...» это идет еще на 100 строк.
Класс для отображения изображений:}
public class PlayersListActivity extends Activity {
// URL to make request
private static String URL = "url goes here";
private static int userID;
ArrayList 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();
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 {
@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 parameters = new ArrayList();
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 map = new HashMap();
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...
Я понятия не имею, почему мой Bitmap возвращает ноль. Я пробовал много разных способов, но ничего не работает.
Тот'почему мне так нужна помощь! Спасибо!!!