2013-12-06 2 views
0

Я попытался понять, почему моя переменная result равна нулю? Я проверяю его отладки, но я не понимаю, почему .. Я не вижу своего ImageView в устройстве А вот мой код:Почему я не вижу ImageView на своем устройстве?

public class ClassicView extends Activity { 

private Content content; 
public LinearLayout view; 
ClassicView classicView; 
JSONParser jParser; 
Context context; 
private Bitmap bitmap; 

private ImageView downloadedImg; 
private ProgressDialog simpleWaitDialog; 
//RelativeLayout mainLayout; 

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(new ViewGroup.MarginLayoutParams(
     RelativeLayout.LayoutParams.WRAP_CONTENT, 
     RelativeLayout.LayoutParams.WRAP_CONTENT)); 

public ClassicView() { 

} 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     JSONParser jParser = null; 
     try { 
      jParser = new JSONParser("Json.txt"); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     content = (Content)getIntent().getSerializableExtra("CONTENT"); 


      //this.setClassicLabel(jParser.getContentViewWithId(content.getElemView()).getJSONArray("Label")); 
      //(jParser.getContentViewWithId(content.getElemView()).getJSONArray("Img")); 

     try { 
      this.setClassicImg(); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
    public void setClassicLabel(JSONArray listLabel) throws JSONException { 
     RelativeLayout rl = new RelativeLayout(this); 
     DisplayMetrics metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     setContentView(rl); 

     for (int i = 0; i < listLabel.length(); i++) { 
      TextView tv = new TextView(this); 
      tv.setText(listLabel.getJSONObject(i).getString("text")); 
      RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams((int) (metrics.widthPixels * listLabel.getJSONObject(i).getDouble("size_x")), (int) (metrics.heightPixels * listLabel.getJSONObject(i).getDouble("size_y"))); 
      params.leftMargin = (int) (metrics.widthPixels * listLabel.getJSONObject(i).getDouble("position_x")); 
      params.topMargin = (int) (metrics.heightPixels * listLabel.getJSONObject(i).getDouble("position_y")); 
      rl.addView(tv, params); 

     } 
    } 

    public void setClassicImg() throws JSONException, IOException, MalformedURLException { 
     RelativeLayout rl2 = new RelativeLayout(this); 
     DisplayMetrics metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     setContentView(rl2); 
     ImageView downloadedImg = new ImageView(this); 
     new DownloadImageTask(downloadedImg).execute("http://felicita-pizzeria.fr/images/logo.png"); 
     } 





/* To Load Image */ 


    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
     ImageView myimage; 

     public DownloadImageTask(ImageView bmImage) { 
      this.myimage = bmImage; 
     } 

     protected Bitmap doInBackground(String... urls) { 
      String urldisplay = urls[0]; 
      Bitmap mIcon11 = null; 
      try { 
       InputStream in = new java.net.URL(urldisplay).openStream(); 
       mIcon11 = BitmapFactory.decodeStream(in); 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return mIcon11; 
     } 

     protected void onPostExecute(Bitmap result) { 
      myimage.setImageBitmap(result); 
     } 
    }` 

Кто-нибудь может мне помочь, пожалуйста? спасибо

+0

я думаю, что вы не findviewById() для ImageView которым вы передаете в качестве параметра –

+0

Вы нашли ImageView в (скачалImg) в вашем макете? - ImageView скачалImg = (ImageView) rl2.findViewById (R.id.downloaded_image)? –

+0

где вы создаете downloadImg ImageView? –

ответ

1

Его дает исключение NullPointer, потому что вы могли бы забыть инициализировать ImageView, который вы передаете в качестве параметра в new DownloadImageTask(downloadedImg).execute(..);

Убедитесь, что вы настроите свой ImageView в свой класс.

ImageView downloadedImg =new ImageView(this); 

Используйте код, приведенный ниже, чтобы загрузить изображение из URL:

private Bitmap downloadBitmap(String url) { 
    // initilize the default HTTP client object 
    final DefaultHttpClient client = new DefaultHttpClient(); 

    //forming a HttoGet request 
    final HttpGet getRequest = new HttpGet(url); 
    try { 

     HttpResponse response = client.execute(getRequest); 
      //check 200 OK for success 
     final int statusCode = response.getStatusLine().getStatusCode(); 

     if (statusCode != HttpStatus.SC_OK) { 
      Log.w("ImageDownloader", "Error " + statusCode + 
        " while retrieving bitmap from " + url); 
      return null; 

     } 

     final HttpEntity entity = response.getEntity(); 
     if (entity != null) { 
      InputStream inputStream = null; 
      try { 
       // getting contents from the stream 
       inputStream = entity.getContent(); 

       // decoding stream data back into image Bitmap that android understands 
       image = BitmapFactory.decodeStream(inputStream); 


      } finally { 
       if (inputStream != null) { 
        inputStream.close(); 
       } 
       entity.consumeContent(); 
      } 
     } 
    } catch (Exception e) { 

     Log.e("ImageDownloader", "Something went wrong while" + 
       " retrieving bitmap from " + url + e.toString()); 
    } 

    return image; 
} 

Измените код, как показано ниже:

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    ImageView myimage; 

    public DownloadImageTask(ImageView bmImage) { 
     this.myimage = bmImage; 
    } 

    protected Bitmap doInBackground(String... urls) { 
     String urldisplay = urls[0]; 
     Bitmap mIcon11 = null; 
     try { 
        mIcon11 = downloadBitmap(urldisplay); 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return mIcon11; 
    } 

    protected void onPostExecute(Bitmap result) { 
     myimage.setImageBitmap(result); 
    } 
} 

Редакцией:

Вот мой код который я пробовал и который работает как шарм.

public class MainActivity extends Activity { 

    Bitmap image; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ImageView mm=new ImageView(getApplicationContext()); 

     new DownloadImageTask(mm).execute("http://felicita-pizzeria.fr/images/logo.png"); 
     setContentView(mm); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    private Bitmap downloadBitmap(String url) { 
     // initilize the default HTTP client object 
     final DefaultHttpClient client = new DefaultHttpClient(); 

     //forming a HttoGet request 
     final HttpGet getRequest = new HttpGet(url); 
     try { 

      HttpResponse response = client.execute(getRequest); 
       //check 200 OK for success 
      final int statusCode = response.getStatusLine().getStatusCode(); 

      if (statusCode != HttpStatus.SC_OK) { 
       Log.w("ImageDownloader", "Error " + statusCode + 
         " while retrieving bitmap from " + url); 
       return null; 

      } 

      final HttpEntity entity = response.getEntity(); 
      if (entity != null) { 
       InputStream inputStream = null; 
       try { 
        // getting contents from the stream 
        inputStream = entity.getContent(); 

        // decoding stream data back into image Bitmap that android understands 
        image = BitmapFactory.decodeStream(inputStream); 


       } finally { 
        if (inputStream != null) { 
         inputStream.close(); 
        } 
        entity.consumeContent(); 
       } 
      } 
     } catch (Exception e) { 

      Log.e("ImageDownloader", "Something went wrong while" + 
        " retrieving bitmap from " + url + e.toString()); 
     } 

     return image; 
    } 

    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
      ImageView myimage; 

      public DownloadImageTask(ImageView bmImage) { 
       this.myimage = bmImage; 
      } 

      protected Bitmap doInBackground(String... urls) { 


     String urldisplay = urls[0]; 
      Bitmap mIcon11 = null; 
      try { 
         mIcon11 = downloadBitmap(urldisplay); 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return mIcon11; 
     } 

     protected void onPostExecute(Bitmap result) { 
      myimage.setImageBitmap(result); 
     } 
    } 

}

Выход:

enter image description here

+0

@GrlsHu Я попробовал это, и мой LogCat: '12-06 09: 53: 45.773: E/ImageDownloader (5064): Что-то ушло неверно при извлечении растрового изображения из http://felicita-pizzeria.fr/images/logo.pngjava.net.SocketException: recvfrom failed: ECONNRESET (соединение сброшено одноранговым) ' – Fcps

+0

Вы предоставили разрешение на интернет? – GrIsHu

+0

да я предоставил его в AndroidManifest – Fcps

1

Это null, потому что downloadedImg вы передаете конструктору задачи null. Ваш код не показывает код, как вы находите этот ImageView, но, скорее всего, вы либо ищете образ, который не существует в этом макете, либо вы забыли сделать это полностью.

Смежные вопросы