Android的AsynkTask投掷空指针 [英] Android AsynkTask Throwing null pointer

查看:88
本文介绍了Android的AsynkTask投掷空指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

不完全知道我在做什么错在这里,但我想从使用AsynkTask的HTTPS URL下载图像,但我epicly失败不知何故?为什么我得到一个空指针异常?

我已经困的URL并显示它,所以我知道这是合法的,我甚至用Web浏览器打它。

 公共类WelcomeFragment扩展片段{
    SimpleCursorAdapter适配器;
    静态最后的String [] FROM = {} StatusData.KEY_USER_NAME;
    静态最终诠释[] TO = {} R.id.txtName;
    私人ProgressDialog simpleWaitDialog;
    私人ImageView的downloadedImg;    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
    }    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
        的WebView mWebView;
        TextView的MNAME,memail,母亲,mtextView1;
        ImageView的mpicture;        查看查看= inflater.inflate(R.layout.fragment_welcome,NULL);        串约= getResources()的getString(R.string.about_msg)。
        MNAME =(TextView中)view.findViewById(R.id.txtName);
        memail =(TextView中)view.findViewById(R.id.txtEmail);
        mpicture =(ImageView的)view.findViewById(R.id.profilepicture);
        妈妈=(TextView中)view.findViewById(R.id.txtOther);
        mtextView1 =(TextView中)view.findViewById(R.id.textView1);
        关于= about.replace(\\\\,​​);
        约=< HTML和GT;<身体GT;
                +&下,P对齐= \\证明\\>中
                +约+< / P>中
                +< /身体GT;< / HTML>中;        //获取数据
        光标C = getActivity()getContentResolver()查询(StatusProvider.CONTENT_URI_USER,NULL,NULL,NULL,NULL);        如果(c.moveToFirst())
        {            mName.setText(c.getString(2));
            memail.setText(c.getString(5)); //电子邮件
            mtextView1.setText(c.getString(6)); // URL图片            mpicture.setTag(c.getString(6));
            新ImageDownloader()执行(c.getString(6))。            mother.setText(c.getString(7)); //重要的另一半
            Log.i(欢迎光临,NAME FOUND表);
        }其他{
            Log.i(欢迎光临,找不到名称表);
        }
        mWebView =((的WebView)view.findViewById(R.id.about));        mWebView.loadData(约,text / html的,UTF-8);        返回视图。
    }
    私有类ImageDownloader扩展的AsyncTask<弦乐,太虚,位图> {        @覆盖
        保护位图doInBackground(字符串参数...){
            // TODO自动生成方法存根
            返回downloadBitmap(参数[0]);
        }        @覆盖
        在preExecute保护无效(){
            Log.i(异步示例,在名为preExecute);
            simpleWaitDialog = ProgressDialog.show(getActivity(),等待,下载图片);        }        @覆盖
        保护无效onPostExecute(位图结果){
            Log.i(异步示例,onPostExecute称为);
            downloadedImg.setImageBitmap(结果);
            simpleWaitDialog.dismiss();
        }        私人位图downloadBitmap(字符串URL){
            //用来初始化默认的HTTP客户端对象
            最后DefaultHttpClient客户端=新DefaultHttpClient();            //形成HttoGet要求
            最终HTTPGET调用getRequest =新HTTPGET(URL);
            尝试{                HTT presponse响应= client.execute(调用getRequest);                //检查成功200 OK
                。最终诠释状态code = response.getStatusLine()的getStatus code();                如果(状态code!= HttpStatus.SC_OK){
                    Log.w(ImageDownloader,错误+状态code +,同时检索从位图+网址);
                    返回null;                }                最终HttpEntity实体= response.getEntity();
                如果(实体!= NULL){
                    为InputStream的InputStream = NULL;
                    尝试{
                        //从流获取内容
                        的InputStream = entity.getContent();                        //解码流数据回图像位图理解的android
                        最后的位图位图= BitmapFactory.de codeStream(InputStream的);                        返回位图;
                    } {最后
                        如果(的InputStream!= NULL){
                            inputStream.close();
                        }
                        entity.consumeContent();
                    }
                }
            }赶上(例外五){
                //你可以提供一个IOException异常更明确的错误信息
                getRequest.abort();
                ; Log.e(ImageDownloader+ URL + e.toString()的东西,而从检索了位错)
            }            返回null;
        }
    }}

logcat的:

  05-23 13:32:00.116:E / AndroidRuntime(22911):致命异常:主要
    05-23 13:32:00.116:E / AndroidRuntime(22911):显示java.lang.NullPointerException
    05-23 13:32:00.116:E / AndroidRuntime(22911):在com.projectcaruso.naturalfamilyplaning.WelcomeFragment$ImageDownloader.onPostExecute(WelcomeFragment.java:111)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在com.projectcaruso.naturalfamilyplaning.WelcomeFragment$ImageDownloader.onPostExecute(WelcomeFragment.java:1)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在android.os.AsyncTask.finish(AsyncTask.java:631)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在android.os.Handler.dispatchMessage(Handler.java:99)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在android.os.Looper.loop(Looper.java:137)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在android.app.ActivityThread.main(ActivityThread.java:4950)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在java.lang.reflect.Method.invokeNative(本机方法)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在java.lang.reflect.Method.invoke(Method.java:511)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1004)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
    05-23 13:32:00.116:E / AndroidRuntime(22911):在dalvik.system.NativeStart.main(本机方法)


解决方案

downloadedImg 未初始化

Not exactly sure what I'm doing wrong here but I'm trying to download an image from an https url using a AsynkTask but I'm epicly failing somehow?! Why am I getting a null pointer exception?

I've trapped the url and displayed it so I know it's legit, I even hit it with the web browser.

public class WelcomeFragment extends Fragment {
    SimpleCursorAdapter adapter;
    static final String[] FROM = { StatusData.KEY_USER_NAME };
    static final int[] TO = { R.id.txtName };
    private ProgressDialog simpleWaitDialog;
    private ImageView downloadedImg;

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

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        WebView mWebView;
        TextView mName, memail, mother, mtextView1;
        ImageView mpicture;

        View view = inflater.inflate(R.layout.fragment_welcome, null);

        String about = getResources().getString(R.string.about_msg);
        mName = (TextView) view.findViewById(R.id.txtName);
        memail = (TextView) view.findViewById(R.id.txtEmail);
        mpicture = (ImageView) view.findViewById(R.id.profilepicture);
        mother = (TextView) view.findViewById(R.id.txtOther);
        mtextView1 = (TextView) view.findViewById(R.id.textView1);


        about = about.replace("\\", "");
        about = "<html><body>"
                + "<p align=\"justify\">" 
                + about + "</p> "
                + "</body></html>";

        // Get the data
        Cursor c = getActivity().getContentResolver().query(StatusProvider.CONTENT_URI_USER, null, null, null, null);

        if(c.moveToFirst())
        {

            mName.setText(c.getString(2));
            memail.setText(c.getString(5)); //email
            mtextView1.setText(c.getString(6)); //picture url

            mpicture.setTag(c.getString(6));


            new ImageDownloader().execute(c.getString(6));



            mother.setText(c.getString(7)); //significant_other
            Log.i("WELCOME", "NAME FOUND IN TABLE" );
        } else {
            Log.i("WELCOME", "NAME NOT FOUND IN TABLE" );
        }


        mWebView = ((WebView) view.findViewById(R.id.about));

        mWebView.loadData(about, "text/html", "utf-8");

        return view;
    }   


    private class ImageDownloader extends AsyncTask<String, Void, Bitmap> {

        @Override
        protected Bitmap doInBackground(String... param) {
            // TODO Auto-generated method stub
            return downloadBitmap(param[0]);
        }

        @Override
        protected void onPreExecute() {
            Log.i("Async-Example", "onPreExecute Called");
            simpleWaitDialog = ProgressDialog.show(getActivity(),"Wait", "Downloading Image");

        }

        @Override
        protected void onPostExecute(Bitmap result) {
            Log.i("Async-Example", "onPostExecute Called");
            downloadedImg.setImageBitmap(result);
            simpleWaitDialog.dismiss();
        }

        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
                        final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

                        return bitmap;
                    } finally {
                        if (inputStream != null) {
                            inputStream.close();
                        }
                        entity.consumeContent();
                    }
                }
            } catch (Exception e) {
                // You Could provide a more explicit error message for IOException
                getRequest.abort();
                Log.e("ImageDownloader", "Something went wrong while retrieving bitmap from " + url + e.toString());
            } 

            return null;
        }
    }

}

logcat:

    05-23 13:32:00.116: E/AndroidRuntime(22911): FATAL EXCEPTION: main
    05-23 13:32:00.116: E/AndroidRuntime(22911): java.lang.NullPointerException
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at com.projectcaruso.naturalfamilyplaning.WelcomeFragment$ImageDownloader.onPostExecute(WelcomeFragment.java:111)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at com.projectcaruso.naturalfamilyplaning.WelcomeFragment$ImageDownloader.onPostExecute(WelcomeFragment.java:1)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at android.os.AsyncTask.finish(AsyncTask.java:631)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at android.os.Handler.dispatchMessage(Handler.java:99)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at android.os.Looper.loop(Looper.java:137)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at android.app.ActivityThread.main(ActivityThread.java:4950)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at java.lang.reflect.Method.invokeNative(Native Method)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at java.lang.reflect.Method.invoke(Method.java:511)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
    05-23 13:32:00.116: E/AndroidRuntime(22911):    at dalvik.system.NativeStart.main(Native Method)

解决方案

downloadedImg is not initialized

这篇关于Android的AsynkTask投掷空指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆