0

我在从位图中显示图像时遇到问题。我从 JsonObject 获取 base64 编码的字符串,然后解码以获取字节数组和位图。我对此很不走运,所以我现在正在尝试使用可绘制的相同图像。

现在的问题是我在 imageView 中设置图像位图时遇到空指针异常并且不知道为什么......

已阅读:ImageView 变量即使在定义后也返回 null;安卓

整个班级的代码是:`package com.statsports.subjectiveandroid;

public class PlayersListActivity extends Activity {

    // URL to make request
    private static String URL = "http://000.000.00.0/index.php";
    private static int userID;
    ArrayList<HashMap<String, Object>> playersList;
    ListView playerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        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)));

                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(PlayersListActivity.URL);
                httpPost.setEntity(new UrlEncodedFormEntity(parameters,
                        ("ISO-8859-1")));
                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");
                        String base64 = jsonObject.getString("image");
                        map.put("id", id);
                        map.put("name", name);
                        if (name == null || name.trim().length() == 0) {
                            name = "Player unknown";
                        } else {
                            map.put("image", (R.drawable.baboon));
                        }

                        Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.walcott);
                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
                        byte[] byteArray = stream.toByteArray();
                        Bitmap bmp1 = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
                        ImageView image = (ImageView) findViewById(R.id.image);

                        image.setImageBitmap(bmp1);
                        //ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        //byte[] decodedString = Base64.decode(
                        //      base64.getBytes("UTF-8"), Base64.NO_PADDING);
                        /*
                         * InputStream is = new
                         * ByteArrayInputStream(decodedString); Bitmap bitmap =
                         * BitmapFactory.decodeStream(is);
                         * bitmap.compress(Bitmap.CompressFormat.PNG, 100,
                         * stream);
                         * 
                         * if(bitmap != null){ //Drawable drawableImg = new
                         * BitmapDrawable(getResources(), bitmap); ImageView
                         * imgView = (ImageView) findViewById(R.id.image);
                         * imgView.setImageBitmap(bitmap); map.put("image",
                         * bitmap); }
                         */

                        //String images = new String(decodedString);
                        //Bitmap decodedByte = BitmapFactory.decodeByteArray(
                        //      decodedString, 0, decodedString.length);
                        //decodedByte.compress(Bitmap.CompressFormat.PNG, 100,
                        //      stream);
                        //Log.d("DECODEDBYTE IS: ", decodedByte.toString());

                        //LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        //View view = inflater.inflate(R.layout.activity_players_list, null);
                        //setContentView(view);
                        //ImageView imgView = (ImageView) findViewById(R.id.image);
                        //imgView.setImageBitmap(decodedByte);

                        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();
        }
    }
} 
4

0 回答 0