主题 : 小白问问安卓 字符串分割完 经常系统意外结束 求原因 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 109111
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
综合积分: 4 分
注册时间: 2014-10-17
最后登录: 2014-10-30
楼主  发表于: 2014-10-27 20:56

 小白问问安卓 字符串分割完 经常系统意外结束 求原因

本来运行没问题
用到个字符串分割的函数之后,就一直结束进程
最下面红色~
求问原因


package com.friendlyarm.SerialPortDemo;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;
import android.util.Log;
import android.text.Html;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;

import com.friendlyarm.AndroidSDK.HardwareControler;
import com.friendlyarm.SerialPortDemo.R;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.content.Context;
import android.content.Intent;
import java.util.regex.*;
import java.util.*;

public class SerialPortDataProcessView extends Activity implements OnClickListener {
private static final String TAG = "SerialPort";
private TextView fromTextView = null;
private TextView a;
private TextView b;
private EditText toEditor = null;
private final int MAXLINES = 200;
private StringBuilder remoteData = new StringBuilder(256*MAXLINES);

    private String devName = "/dev/s3c2410_serial1";
    private int speed = 9600;
    private int dataBits = 8;
    private int stopBits = 1;
    private int devfd =-1;
    private String str1;
    private String Temp;
    private String Humi;
    @Override
    public void onDestroy()
        {
        timer.cancel();
        if (devfd != -1)
        {
            HardwareControler.close(devfd);
            devfd = -1;
        }
        super.onDestroy();
        }

    @Override
    public void onCreate(Bundle savedInstanceState)
        {
        super.onCreate(savedInstanceState);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
{
setContentView(R.layout.serialport_dataprocessview_landscape);
}
else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
setContentView(R.layout.serialport_dataprocessview);
}

String winTitle = "串口1," +"波特率:"+ speed + "," +"数据位:"+ dataBits + "," + "停止位:"+stopBits;
setTitle(winTitle);

        ((Button)findViewById(R.id.sendButton)).setOnClickListener(this);
        ((Button)findViewById(R.id.back)).setOnClickListener(this);
        fromTextView = (TextView)findViewById(R.id.fromTextView);
        toEditor = (EditText)findViewById(R.id.toEditor);
        a=(TextView)findViewById(R.id.a);
        b=(TextView)findViewById(R.id.b);
        
        /* no focus when begin */
        toEditor.clearFocus();
        toEditor.setFocusable(false);
        toEditor.setFocusableInTouchMode(true);
        
devfd = HardwareControler.openSerialPort( devName, speed, dataBits, stopBits );
if (devfd >= 0)
{
timer.schedule(task, 0, 500);
}
else
{
devfd = -1;
fromTextView.append("Fail to open " + devName + "!");
}
        }
    
    private final int BUFSIZE = 512;
    private byte[] buf = new byte[BUFSIZE];
private Timer timer = new Timer();
private Timer timer1 = new Timer();
private Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
switch (msg.what)
{
case 1:
if (HardwareControler.select(devfd, 0, 0) == 1)
{
int retSize = HardwareControler.read(devfd, buf, BUFSIZE);
if (retSize > 0)
{
str1 = new String(buf, 0, retSize);    
remoteData.append(str1);
//Log.d(TAG, "#### LineCount: " + fromTextView.getLineCount() + ", remoteData.length()=" + remoteData.length());
if (fromTextView.getLineCount() > MAXLINES)
{
int nLineCount = fromTextView.getLineCount();
int i = 0;
for (i = 0; i < remoteData.length(); i++)
{
if (remoteData.charAt(i) == '\n')
{
nLineCount--;

if (nLineCount <= MAXLINES)
{
break;
}
}
}
remoteData.delete(0, i);
//Log.d(TAG, "#### remoteData.delete(0, " + i + ")");
fromTextView.setText(remoteData.toString());

}
else
{
fromTextView.append(str1);
}

((ScrollView)findViewById(R.id.scroolView)).fullScroll(View.FOCUS_DOWN);
}
}
break;
}
super.handleMessage(msg);

}
};
private TimerTask task = new TimerTask()
{
public void run()
{
Message message = handler.obtainMessage();
message.what = 1;
handler.sendMessage(message);

}
};
private TimerTask task1 = new TimerTask()
{
public void run()
{
BT();
}
};

    public void onClick(View v)
    {
        switch (v.getId())
        {
        case R.id.sendButton:String str = toEditor.getText().toString();
        
        if (str.length() > 0)
        {
        if (str.charAt(str.length()-1) != '\n')
        {
        str = str + "\n";
        }
        int ret = HardwareControler.write(devfd, str.getBytes());
        if (ret > 0)
        {
        toEditor.setText("");
        
            str = "发送了数据:" + str;
            if (remoteData.length() > 0)
            {
            if (remoteData.charAt(remoteData.length()-1) != '\n')
            {
            remoteData.append('\n');
            fromTextView.append("\n");
            }
            }
            remoteData.append(str);
            fromTextView.append(str);
            
            ((ScrollView)findViewById(R.id.scroolView)).fullScroll(View.FOCUS_DOWN);
        }
        else
        {
        Toast.makeText(this,"Fail to send!",Toast.LENGTH_SHORT).show();
        }
        }
        
        break;
        case R.id.back: SerialPortDataProcessView.this.onDestroy();
        SerialPortDataProcessView.this.finish();
        }
    }
    public void BT()
    {
        Temp=str1.substring(16,21);
Humi=str1.substring(22,27);
a.setText(Temp);
b.setText(Humi);

    }  
}

加了最后这个BT()之后 一直溢出,问问原因啊~~~