在Asynctask中设置位图时出现Nullpointer异常

时间:2014-03-17 20:07:18

标签: android facebook imageview

我一直在玩facebook SDK。 试图提取有关用户和图像的信息等。 我遇到的问题是尝试为用户获取profilepicture并在我自己的自定义视图中设置它。

这里是:

View v = inflater.inflate(R.layout.wingman, container, false);
AsyncTaskRunner bitmapJob = new AsyncTaskRunner(main.getContext(),v);
bitmapJob.execute(GlobalVariables.getUser().getId());

这是我的asyncTaskRunner类:

私有类AsyncTaskRunner扩展了AsyncTask {

    private Bitmap bitmap;
    private Context mContext;
    private View rootView;

    public AsyncTaskRunner(Context context, View rootView){
        this.mContext=context;
        this.rootView=rootView;
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        // TODO Auto-generated method stub

        bitmap = null; 

        //Fetch facebook pic
        URL image_value;
        try {
            image_value = new URL("http://graph.facebook.com/"+GlobalVariables.getUser().getId()+"/picture?width=350&height=350" );
            bitmap = BitmapFactory.decodeStream(image_value.openConnection().getInputStream());
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return bitmap;
    }

    /* (non-Javadoc)
     * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
     */
    @Override
    protected void onPostExecute(Bitmap result) {
        // TODO Auto-generated method stub
        Log.d("Debug","onPostExecute");
        RoundedImageView rImgView = (RoundedImageView)rootView.findViewById(R.id.roundedImageViewProfil);
        Log.d("Debug","result: " + result);
        if(result != null){
            Log.d("Debug","Try to set");
            rImgView.setImageBitmap(result);
        }
        else{
            Log.d("Debug","didnt work");
            rImgView.setImageResource(R.drawable.temp);
        }           
    }
}

这是调试消息:

03-17 20:55:44.465: D/Debug(20080): result: android.graphics.Bitmap@42661550
03-17 20:55:44.465: D/Debug(20080): Try to set
03-17 20:55:44.465: D/AndroidRuntime(20080): Shutting down VM
03-17 20:55:44.465: W/dalvikvm(20080): threadid=1: thread exiting with uncaught exception (group=0x41540ba8)
03-17 20:55:44.465: E/AndroidRuntime(20080): FATAL EXCEPTION: main
03-17 20:55:44.465: E/AndroidRuntime(20080): Process: com.thorne.wingman, PID: 20080
03-17 20:55:44.465: E/AndroidRuntime(20080): java.lang.NullPointerException
03-17 20:55:44.465: E/AndroidRuntime(20080):    at com.thorne.wingman.Wingman$AsyncTaskRunner.onPostExecute(Wingman.java:116)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at com.thorne.wingman.Wingman$AsyncTaskRunner.onPostExecute(Wingman.java:1)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at android.os.AsyncTask.finish(AsyncTask.java:632)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at android.os.Handler.dispatchMessage(Handler.java:102)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at android.os.Looper.loop(Looper.java:136)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at android.app.ActivityThread.main(ActivityThread.java:5017)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at java.lang.reflect.Method.invokeNative(Native Method)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at java.lang.reflect.Method.invoke(Method.java:515)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-17 20:55:44.465: E/AndroidRuntime(20080):    at dalvik.system.NativeStart.main(Native Method)

潜伏在论坛周围,我无法找到解决问题的方法。 是什么引起了人们的不安全感?

BR

1 个答案:

答案 0 :(得分:0)

异常:rImgView.setImageBitmap(result); 看起来rImgView为null。 也许传入的rootView不是你想要的正确布局? 为什么不在启动AsyncTask之前为RoundedImageView提供资金并将其传入呢?