2013-04-12 3 views
0

Я пытаюсь загрузить профиль изображения facebook с помощью AsyncTask, однако я получаю, что растровое изображение, загруженное, является нулевым, и поэтому я получаю nullPointerExceprion.Загрузить изображение профиля из facebook

это мой код:

private synchronized void downloadAvatar(final String user_id,final ImageView iv) { 
     AsyncTask<Void, Void, Bitmap> task = new AsyncTask<Void, Void, Bitmap>() { 

      @Override 
      public Bitmap doInBackground(Void... params) { 
       URL fbAvatarUrl = null; 
       Bitmap fbAvatarBitmap = null; 
       try { 
        fbAvatarUrl = new URL("http://graph.facebook.com/"+user_id+"/picture"); 
        fbAvatarBitmap = BitmapFactory.decodeStream(fbAvatarUrl.openConnection().getInputStream()); 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       return fbAvatarBitmap; 
      } 

      @Override 
      protected void onPostExecute(Bitmap result) { 


       iv.setImageBitmap(result); 
      } 

     }; 
     task.execute(); 
    } 

(user_id) является EXIST профиль идентификатор -i проверил в режиме отладки ..

я получаю NullPointerException на этой линии:

iv.setImageBitmap(result); 

(результат нулевой)

также, здесь LogCat:

04-12 14:16:40.140: E/AndroidRuntime(19304): FATAL EXCEPTION: main 
04-12 14:16:40.140: E/AndroidRuntime(19304): java.lang.NullPointerException 
04-12 14:16:40.140: E/AndroidRuntime(19304): at com.example.sal.ProfileActivity$15.onPostExecute(ProfileActivity.java:1998) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at com.example.sal.ProfileActivity$15.onPostExecute(ProfileActivity.java:1) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at android.os.AsyncTask.finish(AsyncTask.java:602) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at android.os.AsyncTask.access$600(AsyncTask.java:156) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at android.os.Looper.loop(Looper.java:137) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at android.app.ActivityThread.main(ActivityThread.java:4575) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at java.lang.reflect.Method.invokeNative(Native Method) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at java.lang.reflect.Method.invoke(Method.java:511) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
04-12 14:16:40.140: E/AndroidRuntime(19304): at dalvik.system.NativeStart.main(Native Method) 
+0

Глупый вопрос, загружен ли fbAvatarBitmap? – Jachu

+0

Я думаю, что изображение правильно загружено, у меня есть еще одна проблема: он говорит, что я не могу установить изображение в ImageView, потому что только основной поток в иерархии может коснуться его представлений ... так как я могу передать ImageView в эту AsyncTask и поставить растровое изображение? thanks alot –

+0

Создана ли Asynktask из пользовательского интерфейса? – Jachu

ответ

0

Я скопировал свой код и протестировали его, и он работает нормально получать изображение правильно ..

В журнале вы кладете показывает, что изображение устанавливается в нуль, что означает, что не удалось получить изображение из URL-адрес в части «try», можете ли вы поместить лог-код части try catch, и если есть какие-то исключения, возникшие до указателя NULL?

Я также рекомендую вам установить изображение в «попробовать», так что она будет установлена ​​только тогда, когда удалось получить изображение, и в улове вы можете установить ошибку, определяющий тост ..

Сейчас двойной проверьте, вы добавили разрешение на интернет, и покажите нам полный журнал до исключения нулевого указателя, пожалуйста ...

+0

вы правы, я думаю, что сейчас плотно, что изображение правильно загружено, однако у меня есть еще одна проблема, в которой говорится, что я не могу установить изображение в ImageView, потому что только основной поток в иерархии может коснуться его представлений ... так как я могу пройти ImageView в эту AsyncTask и поместить в нее растровое изображение? спасибо alot –

+0

да, моя ошибка, взгляды не могут быть упомянуты в фоновом режиме .. так что просто в post выполните двойную проверку, если не null до установки изображения, вы можете добавить тост, если null: if (result! = null) iv. setImageBitmap (результат); прочее // тост –

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