首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当我关闭互联网时AsyncTask崩溃

当我关闭互联网时AsyncTask崩溃
EN

Stack Overflow用户
提问于 2016-01-19 16:50:40
回答 2查看 381关注 0票数 1

我有一个拍摄照片并发送到亚马逊的活动,但如果我在上传时关闭了互联网,应用程序就会崩溃。我需要暂停异步并将警告发送到下一个活动

活动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void takeASelfie() {
    selfieController.takeASelfie();
}

public void useCamera() {

    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        // Create the File where the photo should go
        try {
            photoFile = createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File
        }
        // Continue only if the File was successfully created
        if (photoFile != null) {
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                    Uri.fromFile(photoFile));
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        if (photoFile != null) {
            imageUri = Uri.fromFile(photoFile);

            Intent intent = new Intent(SelfieUI.this, PicturePreview.class);
            Bundle bundle = new Bundle();
            bundle.putSerializable(PicturePreview.NAME, name);
            bundle.putSerializable(PicturePreview.STEP, 1);
            bundle.putSerializable(PicturePreview.URI_PHOTO, imageUri.toString());
            intent.putExtras(bundle);
            SelfieUI.this.startActivity(intent);
        }
    }
}

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp;
    File storageDir = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = "file:" + image.getAbsolutePath();
    return image;
}

public void sendPicture(Boolean shouldSend) {
    if (shouldSend) {
        amazon();
    }
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    //now getIntent() should always return the last received intent
}

public void amazon() {
    String fileName = photoFile.getName();
    long mTotalFileBytes;

    ObjectMetadata metadata = new ObjectMetadata();

    metadata.setContentLength(mTotalFileBytes = photoFile.length());
    metadata.setContentType("image/".concat(fileName));

    CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
            getApplicationContext(),
            "us-east-1:d6932c78-dadd-45bc-98d0-f89673a13c31",
            Regions.US_EAST_1
    );

    amazonS3Client = new AmazonS3Client(credentialsProvider);
    amazonS3Client.setRegion(Region.getRegion(Regions.SA_EAST_1));
    try {
        por = new PutObjectRequest(bucket, fileName, new FileInputStream(photoFile), metadata);

        postImageAsyncTask = new PostImageAsyncTask(0);
        postImageAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    amazonUrl = amazonS3Client.getResourceUrl(bucket, fileName);
    Log.e(">>>>>URL", ">>>>>" + amazonUrl);


}

public void finishTakingASelfie(Picture picture) {
    if (picture != null) {
        Intent intent = new Intent(SelfieUI.this, InformationStatusUI.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable(InformationStatusUI.NAME, name);
        bundle.putSerializable(InformationStatusUI.STAGE, 3);
        bundle.putSerializable(InformationStatusUI.SELF_URL, picture.getSelfieURL());
        intent.putExtras(bundle);
        SelfieUI.this.startActivity(intent);
    } else {
        Intent intent = new Intent(SelfieUI.this, InformationStatusUI.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable(InformationStatusUI.NAME, name);
        bundle.putSerializable(InformationStatusUI.STAGE, 3);
        intent.putExtras(bundle);
        SelfieUI.this.startActivity(intent);
    }
}

异步任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class PostImageAsyncTask extends AsyncTask<Object, Object, PutObjectResult> {
    int backoff = 0;

    public PostImageAsyncTask(Integer backoff) {
        super();
        this.backoff = backoff;

    }

    @Override
    protected void onPreExecute() {
        ConnectivityManager cm =
                (ConnectivityManager) SelfieUI.this.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean isConnected = activeNetwork != null &&
                activeNetwork.isConnectedOrConnecting();

        if (!isConnected) {
            if (postImageAsyncTask != null && postImageAsyncTask.getStatus() != AsyncTask.Status.FINISHED)
                postImageAsyncTask.cancel(true);
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    RECONECT_TIME_DELAY = RECONECT_TIME_DELAY * 2;
                    postImageAsyncTask = new PostImageAsyncTask(0);
                    postImageAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
                }
            }, RECONECT_TIME_DELAY);
        }
    }

    @Override
    protected PutObjectResult doInBackground(Object... params) {
        return amazonS3Client.putObject(por);

    }

    @Override
    protected void onPostExecute(PutObjectResult result) {
        if (!isCancelled()) {
            Log.e(">>>>>result", ">>>>>" + result.getContentMd5());
            Toast toast = Toast.makeText(SelfieUI.this, result.getContentMd5(), Toast.LENGTH_LONG);
            toast.show();
            if (result != null) {
                selfieController.picturePostedToS3(amazonUrl);
            }
        } else {
            postImageAsyncTask.cancel(true);
        }
    }
}
}

堆栈跟踪:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                                               Process: com.foregon.forid, PID: 30963
                                                               java.lang.RuntimeException: An error occured while executing doInBackground()
                                                                   at android.os.AsyncTask$3.done(AsyncTask.java:300)
                                                                   at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                                                                   at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                                                                   at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                                   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                                   at java.lang.Thread.run(Thread.java:818)
                                                                Caused by: com.amazonaws.AmazonClientException: Unable to execute HTTP request: Write error: ssl=0xb8a8cc08: I/O error during system call, Connection timed out
                                                                   at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:421)
                                                                   at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:196)
                                                                   at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4204)
                                                                   at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1618)
                                                                   at com.foregon.forid.pictureManagement.boundary.SelfieUI$PostImageAsyncTask.doInBackground(SelfieUI.java:432)
                                                                   at com.foregon.forid.pictureManagement.boundary.SelfieUI$PostImageAsyncTask.doInBackground(SelfieUI.java:402)
EN

回答 2

Stack Overflow用户

发布于 2016-01-19 17:08:50

首先创建一个用于检查网络连通性的类,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ConnectionDetector {

    private Context context;

    public ConnectionDetector(Context context){
        this.context = context;
    }

    public boolean isConnectedToInternet(){

        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
          if (connectivity != null) 
          {
              NetworkInfo[] info = connectivity.getAllNetworkInfo();
              if (info != null) 
                  for (int i = 0; i < info.length; i++) 
                      if (info[i].getState() == NetworkInfo.State.CONNECTED)
                      {
                          return true;
                      }

          }
          return false;
    }
}

然后在后台调用调用方法,检查网络连通性,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
protected PutObjectResult doInBackground(Object... params) {
   if(new ConnectionDetector.isConnectedToInternet()){
    return amazonS3Client.putObject(por);
   } else{
    return null;
   }
}

现在在onPostExecute()中检查是否为空。如果结果为null,则表示没有网络连接。

票数 0
EN

Stack Overflow用户

发布于 2016-01-19 17:29:51

做一些这样的事情

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
    protected PutObjectResult doInBackground(Object... params) {
        try{
            return amazonS3Client.putObject(por);

        } catch (AmazonServiceException e){
            //code
            return null;

        } catch (AmazonClientException f) {
            //code
            return null;
        }

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

https://stackoverflow.com/questions/34882449

复制
相关文章
shell脚本 检查文件是否被修改
1.进行检测目录的添加,可以多个目录 2.添加定时任务,可以一分钟一次,有改动会输出改动情况 #!/bin/bash #2020-3-14 #监测文件是否被修改脚本 #监测目录 dir_file=(/etc) file_list=/usr/local/file_list.txt error_file=/usr/local/error_list.txt display_path() { for i in `ls` do if [[ -d $i ]];then             cd $i    
陈不成i
2021/06/23
2.3K0
powershell修改host文件
使用图形界面发现修改不了host文件,这里提供一种方法: 1.按win+X组合键 2.点击Wodows PowerShell(管理员) 3.输入 cd C:\Windows\System32\drivers\etc
全栈程序员站长
2022/11/07
1.9K0
powershell修改host文件
PostgreSQL 修改查询日期影响索引是否生效
CREATE INDEX "TheTickets_IssueTime_idx" ON "TheTickets" USING btree ("IssueTime")
Morris
2019/04/16
2K0
PostgreSQL 修改查询日期影响索引是否生效
Linux获取文件最后修改时间
这种方式获取到的时间格式明显观赏性可用性都不强,还好linux提供了查看文件最后修改时间的指令
我是李超人
2020/08/21
5.5K0
python监控文件是否被人修改
在工作中有时候需要会几个人同时操作同一个文件夹,但是我们有不知道哪一个文件被修改过。
大家一起学编程
2021/03/27
2K0
js检查日期是否合法
检查日期是否合法 <script> function CheckDateTime(str) { var reg = /^(\d+)-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/; var r = str.match(reg); if (r == null) return false; r[2] = r[2] - 1; var d = new Date(r[
江一铭
2022/06/16
6.4K0
Linux小技巧、文件查找、修改、读取
Linux有许多处理文本的命令,熟练使用这些命令,会使得文本处理效率比在window下快很多,本文介绍一些使用频率比较高的命令,适用于职场小白学习。
震八方紫面昆仑侠
2020/07/23
1.8K0
SparkDSL修改版之从csv文件读取数据并写入Mysql
import java.sql.{Connection, DriverManager, PreparedStatement} import org.apache.spark.sql.{DataFrame, Row, SparkSession} import org.apache.spark.sql.functions._ import org.apache.spark.storage.StorageLevel /** * 电影评分数据分析,需求如下: * 需求1:查找电影评分个数超过50,
Maynor
2022/04/06
1.8K0
查找修改时间在指定区间的文件并打包
#!/bin/bash # find file and tar # joyousphper@gmail.com # find_and_tar.sh read -p "Please enter a search path (eg:/root/) >" search_path if [ -d $search_path ];then echo "find path $search_path" else echo "error: $search_path is not a directory" exit 0
苦咖啡
2018/05/08
1.3K0
JavaScript导出excel文件,并修改文件样式
因为最近需要实现前端导出 excel 文件,并且对导出文件的样式进行一些修改,比如颜色、字体、合并单元格等,所以我找到了 xlsx-style 这个项目,它可以对导出的 excel 文件进行一些样式上的修改,这个项目是 SheetJS 的一个分支。其实 SheetJS 也是支持修改导出文件的样式的,不过是在它的专业版中, SheetJS 分为社区版和专业版的,社区版是开源的,但是却不支持修改导出文件的样式,专业版拥有更多的功能,这其中就包括修改样式,但是如果需要使用专业版,要邮件联系 SheetJS 的开发者,去咨询价格,购买它。
FEWY
2020/05/29
5.7K1
JavaScript导出excel文件,并修改文件样式
easyUI 日期控件修改...
它的中文文档地址: http://www.zi-han.net/case/easyui/
微风-- 轻许--
2022/04/13
1.6K0
easyUI 日期控件修改...
Python读取excel并生成xml_python修改xml
大家好,又见面了,我是你们的朋友全栈君 在使用pandas批量处理Excel文件时,抛出XLRDError错误:XLRDError: Unsupported format, or corrupt fi
全栈程序员站长
2022/09/23
7720
C#/.NET 读取或修改文件的创建时间和修改时间
2018-08-12 11:44
walterlv
2018/09/18
3.5K0
C#/.NET 读取或修改文件的创建时间和修改时间
linux下修改文件查看样式(日期/文件大小)
1.修改ll命令 ll -lh 顺序排序 大小按K、M等格式显示 # 当前用户 vim ~/.bashrc # .bashrc文件中追加,esc+wq退出且保存,esc+q!退出且不保存. alias ll='ls -lh --color=auto' # 编辑完后刷新文件 source ~/.bashrc 2.修改日期显示格式 # 当前用户bash_profile文件 vi ~/.bash_profile # .bash_profile文件中追加环境变量,wq保存. export TIME_STYL
玖柒的小窝
2021/09/09
8.7K0
linux下修改文件查看样式(日期/文件大小)
【错误记录】Ubuntu 修改 hosts 文件 ( 使用 gedit /etc/hosts 命令打开并修改 hosts 文件 )
参考 【错误记录】git clone 报错 ( fatal: unable to access ‘https…‘:gnutls_handshake() failed: Error in the pu ) 博客 ;
韩曙亮
2023/03/30
3K0
【错误记录】Ubuntu 修改 hosts 文件 ( 使用 gedit /etc/hosts 命令打开并修改 hosts 文件 )
Docker部署Nginx并修改配置文件
只要启动访问80端口就能直接访问到/usr/share/nginx/html/index.html了
用户2409797
2019/02/25
9K0
git文件无修改diff无变更居然有许多文件需要提交—被修改
其实有很多种请客。git status可能有一些不同的原因,但git diff可能没有。
周陆军博客
2023/06/06
4.3K0
在Docker中安装MySQL并修改 my.cnf 配置文件
前期经过MySQL主从复制之后,发现数据库的读写非常慢,而且经常发生MySQL连接数过小,导致整个数据库崩溃的情况。通过修改MySQL中的 my.cnf 配置文件参数,以达到MySQL关系型数据库最大性能的合理利用。
全栈开发Dream
2021/06/02
21.4K0
在Docker中安装MySQL并修改 my.cnf 配置文件
git 修改commit日期为之前的日期
我在之前修改了一个文件,但是没有commit,现在我想要commit,日期为那天的日期 git 修改日期的方法很简单,因为有一个命令--date 可以设置 git 提交时间。
林德熙
2018/09/19
3.3K0
点击加载更多

相似问题

Django中的syncdb和更新数据库模式

10

django syncdb和更新的模型

70

更新到1.4后Django syncdb异常

116

django中syncdb的问题

12

django fabric syncdb

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文