这个问题足够奇葩。。
之前没有这个问题。
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。
唉,希望可以解决这个坑( ノД`)