Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AsyncTask在调试时杀死istelf而不显示任何错误消息_Java_Android_Android Asynctask - Fatal编程技术网

Java AsyncTask在调试时杀死istelf而不显示任何错误消息

Java AsyncTask在调试时杀死istelf而不显示任何错误消息,java,android,android-asynctask,Java,Android,Android Asynctask,我在android应用程序中使用AsyncTask下载zip文件时遇到了一个非常奇怪的问题。在我决定对链接到此任务的每个字符串使用strings.xml资源之前,它一直在完美地工作 当我单击应用程序中的下载按钮时,AsyncTask的progressbar会显示一秒钟或更短的时间,然后自动解除,任务进入onPostExecute()状态 我尝试在我的测试设备上调试应用程序,但任务没有错误。我甚至添加了一些带有Log.d标记的存根,我已经包括了logcat结果: 275-15524/xmc.and

我在android应用程序中使用AsyncTask下载zip文件时遇到了一个非常奇怪的问题。在我决定对链接到此任务的每个字符串使用strings.xml资源之前,它一直在完美地工作

当我单击应用程序中的下载按钮时,AsyncTask的progressbar会显示一秒钟或更短的时间,然后自动解除,任务进入onPostExecute()状态

我尝试在我的测试设备上调试应用程序,但任务没有错误。我甚至添加了一些带有
Log.d
标记的存根,我已经包括了logcat结果:

275-15524/xmc.androidexpert35.com.xtrememusicchecker D/ANDRO_ASYNC: path set
2019-04-04 20:19:22.484 15275-15524/xmc.androidexpert35.com.xtrememusicchecker D/ANDRO_ASYNC: Try block
2019-04-04 20:19:22.487 15275-15524/xmc.androidexpert35.com.xtrememusicchecker D/ANDRO_ASYNC: file url got
2019-04-04 20:19:22.490 15275-15524/xmc.androidexpert35.com.xtrememusicchecker D/ANDRO_ASYNC: opening connection
2019-04-04 20:19:22.515 495-528/? D/SurfaceFlinger: duplicate layer name: changing xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity to xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity#1
2019-04-04 20:19:22.585 495-794/? D/SurfaceFlinger: duplicate layer name: changing Surface(name=cafcbf6 xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity)/@0x3604cd - animation-leash to Surface(name=cafcbf6 xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity)/@0x3604cd - animation-leash#1
2019-04-04 20:19:22.614 15275-15275/xmc.androidexpert35.com.xtrememusicchecker I/ViewRootImpl: CPU Rendering VSync enable = true
2019-04-04 20:19:22.672 495-528/? W/SurfaceFlinger: Attempting to set client state on removed layer: xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity#1
2019-04-04 20:19:22.672 495-528/? W/SurfaceFlinger: Attempting to destroy on removed layer: xmc.androidexpert35.com.xtrememusicchecker/xmc.androidexpert35.com.xtrememusicchecker.SettingsActivity#1
2019-04-04 20:19:24.758 15275-15314/xmc.androidexpert35.com.xtrememusicchecker D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=3635, firebase_screen_class(_sc)=SettingsActivity, firebase_screen_id(_si)=-6495914915605520780}]
2019-04-04 20:19:26.125 829-3715/? W/NotificationService: Toast already killed. pkg=xmc.androidexpert35.com.xtrememusicchecker callback=android.app.ITransientNotification$Stub$Proxy@3b51651
这是我的AsyncTask代码,是否有人可以帮助我找到问题?或者建议一个有用的调试解决方案来发现它

谢谢,非常感谢您的帮助

public class DownloadFile extends AsyncTask<String, String, String> {

    private static String file_url;
    private Context context;
    private ProgressDialog dialog;
    private String dialogString;
    private File path;
    private String xmpath;
    private boolean canceled = false;

    public DownloadFile(Context cxt) {
        context = cxt;
        dialog = new ProgressDialog(context);
    }
    @Override
    protected void onPreExecute() {
        dialog.setMessage(context.getString(R.string.xm_downloading));
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setCancelable(false);
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, context.getString(R.string.xm_cancel), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                path.delete();
                canceled = true;
                dialog.dismiss();

            }
        });
        dialog.show();
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... aurl) {
        int count;
        if (SettingsActivity.isMagisk){
            file_url = "http://androidexpert35developer.altervista.org/Xtrememusic-versions/XTREMEMusic_MAGISK_OFICIAL_By_androidexpert35.zip";
            path= new File(Environment.getExternalStorageDirectory() + "/XTREMEMusic_Download/XTREMEMusic_Magisk.zip");
        }else{
            file_url = "http://androidexpert35developer.altervista.org/Xtrememusic-versions/XTREMEMusic_OFFICIAL_By_androidexpert35.zip";
            path = new File(Environment.getExternalStorageDirectory() + "/XTREMEMusic_Download/XTREMEMusic.zip");
            Log.d("ANDRO_ASYNC","path set");
        }
        try {
            Log.d("ANDRO_ASYNC","Try block");
                URL url = new URL(file_url);
            Log.d("ANDRO_ASYNC","file url got");
                URLConnection conexion = url.openConnection();
            Log.d("ANDRO_ASYNC","opening connection");
                conexion.connect();
            Log.d("ANDRO_ASYNC","Connected");
                int lenghtOfFile = conexion.getContentLength();
                InputStream is = url.openStream();
                File testDirectory = new File(Environment.getExternalStorageDirectory() + "/XTREMEMusic_Download");
            Log.d("ANDRO_ASYNC","making directory");
                if (!testDirectory.exists()) {
                    testDirectory.mkdir();
                }
                FileOutputStream fos;
            Log.d("ANDRO_ASYNC","Stream");
                if(SettingsActivity.isMagisk) {
                     fos = new FileOutputStream(testDirectory + "/" + ("XTREMEMusic_Magisk") + ".zip");
                    Log.d("ANDRO_ASYNC","Downloading");
                }else{
                     fos = new FileOutputStream(testDirectory + "/" + ("XTREMEMusic") + ".zip");
                    Log.d("ANDRO_ASYNC","Downloading");
                }
                byte data[] = new byte[1024];
                long total = 0;
                int progress = 0;
                while ((count = is.read(data)) != -1) {
                    total += count;
                    int progress_temp = (int) total * 100 / lenghtOfFile;
                    publishProgress(""+ progress_temp);
                    if (progress_temp % 10 == 0 && progress != progress_temp) {
                        progress = progress_temp;
                    }
                    fos.write(data, 0, count);
                }
                is.close();
                fos.close();
        } catch (Exception e) {}
        return null;

    }
    protected void onProgressUpdate(String... progress) {
        Log.d("ANDRO_ASYNC",progress[0]);
        dialog.setProgress(Integer.parseInt(progress[0]));
    }

    @Override
    protected void onPostExecute(String unused) {
        dialog.dismiss();
        if(SettingsActivity.isInstall) {
            installer();
        }else if (canceled) {
            Toast.makeText(context, R.string.xm_cancelled, Toast.LENGTH_LONG).show();
        } else{
            xmpath = path.toString();
            Toast.makeText(context, context.getString(R.string.xm_downloaded, xmpath), Toast.LENGTH_LONG).show();
        }
    }
公共类下载文件扩展异步任务{
私有静态字符串文件\u url;
私人语境;
私人对话;
私有字符串对话框字符串;
私有文件路径;
私有字符串路径;
私有布尔值=false;
公共下载文件(上下文cxt){
上下文=cxt;
dialog=新建进度对话框(上下文);
}
@凌驾
受保护的void onPreExecute(){
setMessage(context.getString(R.string.xm_下载));
设置ProgressStyle(ProgressDialog.STYLE_水平);
对话框。可设置可取消(false);
setButton(DialogInterface.BUTTON_负值,context.getString(R.string.xm_cancel),new DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
path.delete();
取消=真;
dialog.dismise();
}
});
dialog.show();
super.onPreExecute();
}
@凌驾
受保护的字符串背景(字符串…aurl){
整数计数;
if(设置活动.isMagisk){
文件url=”http://androidexpert35developer.altervista.org/Xtrememusic-versions/XTREMEMusic_MAGISK_OFICIAL_By_androidexpert35.zip";
path=新文件(Environment.getExternalStorageDirectory()+“/XTREMEMusic_Download/XTREMEMusic_Magisk.zip”);
}否则{
文件url=”http://androidexpert35developer.altervista.org/Xtrememusic-versions/XTREMEMusic_OFFICIAL_By_androidexpert35.zip";
path=新文件(Environment.getExternalStorageDirectory()+“/XTREMEMusic_Download/XTREMEMusic.zip”);
Log.d(“ANDRO_ASYNC”,“路径集”);
}
试一试{
Log.d(“ANDRO_ASYNC”,“Try block”);
URL=新URL(文件\ URL);
Log.d(“ANDRO_ASYNC”,“获得文件url”);
URLConnection conexion=url.openConnection();
Log.d(“ANDRO_异步”,“打开连接”);
conexion.connect();
Log.d(“ANDRO_ASYNC”、“Connected”);
int lenghtOfFile=conexion.getContentLength();
InputStream=url.openStream();
File testDirectory=新文件(Environment.getExternalStorageDirectory()+“/xtremememusic_下载”);
d(“ANDRO_ASYNC”,“生成目录”);
如果(!testDirectory.exists()){
testDirectory.mkdir();
}
文件输出流;
Log.d(“ANDRO_ASYNC”、“Stream”);
if(设置活动.isMagisk){
fos=新文件输出流(testDirectory+“/”+(“XTREMEMusic_Magisk”)+“.zip”);
Log.d(“ANDRO_异步”,“下载”);
}否则{
fos=新文件输出流(testDirectory++“/”+(“XTREMEMusic”)+“.zip”);
Log.d(“ANDRO_异步”,“下载”);
}
字节数据[]=新字节[1024];
长总计=0;
int progress=0;
而((计数=is.read(数据))!=-1){
总数+=计数;
内部进度温度=(内部)总计*100/长度办公室;
出版进度(“+progress_temp”);
如果(进度临时%10==0&&progress!=进度临时){
进度=进度\温度;
}
fos.写入(数据,0,计数);
}
is.close();
fos.close();
}捕获(例外e){}
返回null;
}
受保护的void onProgressUpdate(字符串…进度){
Log.d(“ANDRO_ASYNC”,progress[0]);
setProgress(Integer.parseInt(progress[0]);
}
@凌驾
受保护的void onPostExecute(字符串未使用){
dialog.dismise();
if(设置活动.isInstall){
安装程序();
}否则,如果(取消){
Toast.makeText(上下文,R.string.xm_取消,Toast.LENGTH_LONG.show();
}否则{
xmpath=path.toString();
Toast.makeText(context,context.getString(R.string.xm_下载,xmpath),Toast.LENGTH_LONG.show();
}
}

如果存在任何异常,则不进行日志记录,这可能是调试问题最重要的部分。具体而言,您建议记录什么异常?您的
doInbackground
中有一个try/catch,您不使用异常块执行任何操作。只有一个空的异常块是非常糟糕的-删除
 try/catch
,让你的应用程序崩溃,并检查LogCat是否有错误消息存在一个简单的
java.io.IOException:Cleartext HTTP流量
这是一个与新的android 9策略相关的问题。要解决它,我只需添加
android:usesCleartextTraffic=“true”
在AndroidManifest.xml中的
标记内。如果存在任何异常,您不会记录,这可能是调试问题最重要的部分。您建议记录什么异常,具体来说?您在
doInbackground中有一个try/catch,您不需要做任何事情