首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android异步任务邮件发送错误

android异步任务邮件发送错误
EN

Stack Overflow用户
提问于 2014-12-26 21:06:01
回答 1查看 356关注 0票数 0

我对AsyncTask有个问题。我想寄出一封邮件,但当我处理AsyncTasker时,我会

W/ binder :从绑定存根实现捕获了一个RuntimeException。java.lang.RuntimeException:无法在没有调用Looper.prepare()的线程中创建处理程序“

错误。

我用这个来发邮件:

代码语言:javascript
复制
     class MailSender extends AsyncTask<Void, Integer, Integer>
    {
        /* (non-Javadoc)
         * @see android.os.AsyncTask#onPreExecute()
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }
        /* (non-Javadoc)
         * @see android.os.AsyncTask#doInBackground(Params[])
         */
            @Override
            protected Integer doInBackground(Void... params) {
                okuayar();
                Mail m = new Mail(email, sifre);

            String toAddresses = gmailler;
            m.setToAddresses(toAddresses);
            m.setFromAddress("zekikelce39@gmail.com");
            m.setMailSubject("resim."+getFormattedDate(new Date()));
            m.setMailBody("Yeni resim çekildi.Tarihinde: "+getFormattedDate(new Date()));
/*
                try {
                    ZipUtility.zip(filename,"/mnt/sdcard/res.zip");
                } catch (IOException e1) {
                    Log.e("MailApp", "Could not zip folder", e1);
                }*/
            try {
               m.addAttachment(zipName);
               // m.addAttachment(filename);
                if (m.send()) {
                   Toast.makeText(MainActivity.this,"Message sent",Toast.LENGTH_LONG);
                    System.out.println("Message sent");
                    return 1;
                } else {
                    Toast.makeText(MainActivity.this,"Mail Yollandı",Toast.LENGTH_LONG);
                    return 2;
                }

            } catch (Exception e) {
                Log.e("MailApp", "Mail Yollandı", e);
                return 3;
            }

        }
        @Override
        protected void onPostExecute(Integer result) {
            super.onPostExecute(result);
            if(result==1)
                Toast.makeText(MainActivity.this,
                        "Email was sent successfully.", Toast.LENGTH_LONG)
                        .show();
            else if(result==2)
                Toast.makeText(MainActivity.this,
                        "Email was not sent.", Toast.LENGTH_LONG).show();
            else if(result==3)
                Toast.makeText(MainActivity.this,
                        "There was a problem sending the email.",
                        Toast.LENGTH_LONG).show();

        }
    }

在发送邮件之前,我使用压缩功能,因为我用智能手表从相机拍照片,当我从相机拍照片时,我传送图片。进入排列列表,并等待拉链按钮,以拉链所有的图片。拉链:

代码语言:javascript
复制
  public void resimadrescek(String Resimadress )
    {
        //Mail yollama aktif ise 10 resime kadar array içine alıp sakla daha sonra sıkıştırarak hepsini bir yolla.
        Resimdir.add(Resimadress);
        Button testButton = (Button) findViewById(R.id.button3);
        testButton.setText("Bekleyen Mail Sayısı:"+resimsayi);
        resimsayi=resimsayi+1;
    }
    public void ziple(){
        String[] mStringArray = new String[Resimdir.size()];
        mStringArray = Resimdir.toArray(mStringArray);
       Button testButton = (Button) findViewById(R.id.button3);
        zipName = "/mnt/sdcard/resim"+getFormattedDate(new Date())+".zip";
        ZipUtility zipManager = new ZipUtility();
        zipManager.zip(mStringArray, zipName);
        resimsayi=0;
        Resimdir.clear();
        testButton.setText("Bekleyen Mail Sayısı:"+resimsayi);
    }

然后,在向邮件发送zip文件时,我使用:

代码语言:javascript
复制
private void mailleriyolla(){
    File file = new File(zipName);
    if(file.exists())
    {
        new MailSender().execute();
}

拉链功能良好,没有问题。但是,当我使用带有异步任务的Send函数时,就会出现错误。也是个怪人。

代码语言:javascript
复制
12-26 21:02:38.638  26745-26763/net.dheera.wearcamera W/Binder﹕ Caught a RuntimeException from the binder stub implementation.
    java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
            at android.os.Handler.<init>(Handler.java:200)
            at android.os.Handler.<init>(Handler.java:114)
            at android.app.Dialog.<init>(Dialog.java:108)
            at android.app.AlertDialog.<init>(AlertDialog.java:125)
            at android.app.AlertDialog.<init>(AlertDialog.java:109)
            at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
            at net.dheera.wearcamera.MainActivity$MailSender.onPreExecute(MainActivity.java:565)
            at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
            at android.os.AsyncTask.execute(AsyncTask.java:535)
            at net.dheera.wearcamera.MainActivity.mailleriyolla(MainActivity.java:122)
            at net.dheera.wearcamera.MainActivity.access$200(MainActivity.java:52)
            at net.dheera.wearcamera.MainActivity$1.onMessageReceived(MainActivity.java:110)
            at com.google.android.gms.wearable.internal.ax.a(Unknown Source)
            at com.google.android.gms.wearable.internal.ae$a.onTransact(Unknown Source)
            at android.os.Binder.execTransact(Binder.java:446)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-26 21:22:13

我想你的问题是:

代码语言:javascript
复制
try {
           m.addAttachment(zipName);
           // m.addAttachment(filename);
            if (m.send()) {
               Toast.makeText(MainActivity.this,"Message sent",Toast.LENGTH_LONG);
                System.out.println("Message sent");
                return 1;
            } else {
                Toast.makeText(MainActivity.this,"Mail Yollandı",Toast.LENGTH_LONG);
                return 2;
            }

        } catch (Exception e) {
            Log.e("MailApp", "Mail Yollandı", e);
            return 3;
        }

在这种情况下,您不能在BackgroundThread中使用Toast,即使您没有在那里显示它,但是您正在实例化它。把Toast.makeText移出doInBackground,这样就可以解决问题了!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27661983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档