从facebook下载个人资料图片

时间:2013-04-12 11:22:20

标签: java android facebook

我正在尝试使用AsyncTask下载facebook图像配置文件,但是我得到的是下载的位图为null,因此我得到了一个nullPointerExceprion。

这是我的代码:

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)是一个存在的配置文件ID -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)

1 个答案:

答案 0 :(得分:0)

我复制了您的代码并对其进行了测试,并且正常工作正常。

你输入的日志显示图像被设置为null,这意味着它无法从“try”部分的URL中获取图像,你能不能把try catch的logcat放入,如果有任何异常的话在NULL指针之前?

我还建议你在“try”中设置图像,这样只有在成功获取图像时才会设置图像,而在catch中你可以设置一个toast定义错误..

现在仔细检查,你添加了互联网权限,并在空指针异常之前向我们显示完整的日志...