记一个java的奇葩问题

这个问题足够奇葩。。
之前没有这个问题。

public String[] post(String urls)
            {
                URL url;
                String readString;
                String[] mstr=new String[2048];
                DataInputStream dis;
                try
                    {
                        //url=new URL("http://127.0.0.1:8003/dp.php");
                        url = new URL(urls);
                        //url=new URL(root,args[0);//文件夹中的某个文件对应的URL
                        //System.out.println("URL"+url);
                        //int j=0;
                        dis = new DataInputStream(url.openStream());//得到数据输入流
                        j = 0;
                        while ((readString = dis.readLine()) != null)
                            {
                                //System.out.println("readString:"+readString);
                                mstr[j] = readString;
                                j++;
                                if (j >= 1024) break;
                            }

                        //System.out.println("文件读完");
                        dis.close();
                        return mstr;
                    }
                catch (MalformedURLException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        //di("error", "未知异常抛出,联系开发者解决:" + e);
                        return null;
                    }
                catch (IOException e)
                    {
                        //System.out.println("IO异常:"+ e);
                        //di("error", "IO异常抛出,联系开发者解决:" + e);
                        return null;
                    }

            }
        public String readHtml(String myurl, String bfm)
            {
                StringBuffer sb = new StringBuffer("");
                URL url;
                try
                    {
                        url = new URL(myurl);
                        BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), bfm));
                        String s = "";
                        while ((s = br.readLine()) != null)
                            {
                                sb.append(s + "\r\n");
                            }
                    }
                catch (Exception e)
                    {
                        e.printStackTrace();
                        di("error","error:"+e);
                        return null;
                    }
                return sb.toString();
            }

上面是我用在一个Android程序的部分java代码,这段代码作用应该看看都知道,用来请求网址的内容并返回的,不过不知道哪里出了什么差错,在我实机运行时直接手机重启(没错!不是应用程序重新启动,是设备重新启动!)我很纳闷,不知道哪里有问题。。。
当然可能不是函数问题,目前查不出来。。
下面是调用函数的部分代码:

String string="";
                url="";
                String post="";
                String[] str=new String[1024];
                boolean ido = false;
                try
                    {
                        //string = readParse(url, post, "POST");
                        //string = post();
                        if(zb) urls = post("一个TXT文件的URL");//实际不是这个文本
                        else{
                            urls=post("另外一个TXT文件的URL");//实际不是这个文本
                            //di("提醒","使用镜像进行读取");
                        }
                        if(urls==null){
                            throw new Exception("读取失败.");
                        }
                        for(int i=0;i<urls.length;i++){
                        url=urls[i];
                        string = readHtml(url+"gapp.txt", "utf-8");
                        if(string==null||url==null||url==""||string==""||!(string.contains("\r")||string.contains("\n"))){
                            str=null;
                            ido=false;
                        }else{
                            string = string.replace(" "," ");//可能看起来一样,但是后者是特殊的HTML实体中的ensp空格!(注:发布后可能这个空格被吃了)
                            str=null;
                            //str = string.split("\r\n");
                            //str=string.split("\r");
                            if(string.contains("\r\n")){
                                str=string.split("\r\n");
                            }else{
                                if(string.contains("\n")){
                                    str=string.split("\n");
                                }else if(string.contains("\r")){
                                    str=string.split("\r");
                                }else{
                                    //正常情况下不可能来到这里,因为前面判断过了.
                                    //这里再写一次是反正意外发生.
                                    str=null;
                                    ido=false;
                                    //throw new();
                                    break;
                                }
                            }
                            ido = true;
                            break;
                        }
                        }
                        if (str == null) ido = false;
                    }
                catch (Exception e1)
                    {
                        //PrintWriter p=new PrintWriter();
                        //p.witer("自己写的弹窗内容");
                        e1.printStackTrace();
                        //di("error", "出现一些错误:(\n" + e1);
                        whyerror="网页拉取异常:"+e1;
                        ido = false;
                    }
                if (ido == true)
                    {
                        //list.add(string);

                        int i = 0;
                        /*
                         for (i = 0;i < strArr.length;i++)
                         list.add(strArr[i]);
                         */
                        //补bug...
                        try{
                        j = str.length;
                        list.clear();
                        fip.clear();
                        //补bug...
                        String[] stro=new String[5];
                        //list.add("");
                        for (i = 0;i < j;i++)
                            {
                                string = str[i] ;
                                stro = string.split("Ï");
                                if(stro.length>1){
                                    list.add(stro[0]);
                                    fip.add(stro[1]);
                                }else if(stro.length==1){
                                    list.add(stro[0]);
                                    fip.add("null");
                                }//防止异常闪退
                        adapter.notifyDataSetChanged();//更新

                        //list.add(j+"");
                        }
                        }catch (Exception e1){
                            list.clear();
                            fip.clear();
                            list.add("读取数据失败");
                            fip.add("null");
                            //di("异常报告","写入数据到列表出现问题:"+e1);
                            di("读取数据失败","");
                        }
                    }else{
                        url="另外一个TXT文本的URL";//吐槽一下我这个逻辑糟透了。。。
                        list.clear();
                        fip.clear();
                        list.add("出现异常,读取失败!");
                        fip.add("null");
                        di("异常报告","发生异常情况."+whyerror);
                    }
                adapter.notifyDataSetChanged();
                di("提醒","刷新完毕!");
            }

额外注释:
下面是执行上面代码需要的部分函数和变量声明

private Spinner spinner;
        //private Button bt;
        private List<String> list ;
        private int j;
        private String choo;
        private ArrayList<String> fip;
        ArrayAdapter<String> adapter;
        private Button text;

        private Button bt;
        private int chooid;
        private Button mbt;

        private String url;

        private Button sg;

        private String whyerror;

        private String[] urls;

        private ImageButton dback;

        private Button sett;
        
        private ToggleButton tb;
        private ToggleButton tc;
        private Button td;
        
        private boolean zb=false;
        private boolean zc=false;
        private File fileRoot ;
        private Context mo;
        private Button s;
        private Button c;
        
        private static String[] PERMISSIONS_STORAGE = {
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE};
        //请求状态码
        private static int REQUEST_PERMISSION_CODE = 1;

        private String ini=Environment.getExternalStorageDirectory()+"/duserini.txt";
        private void di(String title, String msg)
            {
                new AlertDialog.Builder(this).setTitle(title).setMessage(msg).show();
            }

主程序类声明

public class MainActivity extends Activity

额外注明一下:
我的环境是安卓平台上的AIDE。


唉,希望可以解决这个坑( ノД`)

你可能感兴趣的:(笔记)