我知道之前有人问过类似的问题,但我找不到任何对我有用的东西,所以我很绝望。
我从蓝牙接收了许多值,用逗号分隔,我收到它们作为字符串。它们可以是正十进制数或负十进制数。例如: 0,1.11,2.22,-3.33,-4.44,55.55,66.66,-77.77,8.88,0
然而,我无法提取所有数字。我已经尝试过Regex,我尝试过拆分和解析,我尝试过解析为十进制,双倍,但是我每次都得到Parse函数的未处理异常。
对于最终解决方案的任何帮助表示赞赏。
编辑: 这是我尝试解析的代码部分:
public static void AddToGraphs(string list) {
try
{
var data = list.Split(',').Select(x => double.Parse(x, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture));
double[] dataArray = data.ToArray();
}
catch (Java.IO.IOException e)
{
Log.WriteLine(LogPriority.Error, e.Source, e.Message);
}
}
这是应用程序崩溃时的调用堆栈:
0xFFFFFFFFFFFFFFFF in
System.Diagnostics.Debugger.Mono_UnhandledException_internal C#
0x1 in System.Diagnostics.Debugger.Mono_UnhandledException C#
0x26 in object.6f90deee-2618-4e76-9135-3c21efb2de46 C#
0x96 in System.Number.ParseDouble C#
0x3 in double.Parse C#
0xE in double.Parse C#
0x8 in Namespace.<>c.<AddToGraphs>b__38_0 C#
0x26 in System.Linq.Enumerable.SelectArrayIterator<string,double>.ToArray C#
0x20 in System.Linq.Enumerable.ToArray<double> C#
0x37 in Namespace.Page3Fragment.AddToGraphs C#
0x5A in Namespace.Page1Fragment.MyHandler.HandleMessage C#
0x11 in Android.OS.Handler.n_HandleMessage_Landroid_os_Message_ C#
0x17 in object.6f90deee-2618-4e76-9135-3c21efb2de46 C#
编辑: 这是logcat,带有&#39;列表&#39;变量记录,就在应用程序崩溃之前:
Time Device Name Type PID Tag Message
07-31 00:55:30.097 Samsung SM-G610F Info 32398 Test 0
07-31 00:55:30.157 Samsung SM-G610F Info 32398 Test , 1.11, 2.
编辑: 这是将接收到的数据发送给处理程序的蓝牙服务:
byte[] buffer = new byte[8192];
int bytes;
while (true)
{
bytes = ipStream.Read(buffer, 0, buffer.Length);
try
{
myService.myHandler.ObtainMessage(Page1Fragment.DATA_READ, bytes, -1, buffer).SendToTarget();
}
catch (Java.IO.IOException e)
{
throw e;
}
}
这是处理程序的片段,它接收并传递给AddToGraphs函数:
private class MyHandler : Handler
{
Page1Fragment page1;
public MyHandler(Page1Fragment _page1)
{
page1 = _page1;
}
public override void HandleMessage(Message msg)
{
byte[] readBuf = (byte[])msg.Obj;
string inData = Encoding.ASCII.GetString(readBuf, 0, msg.Arg1);
Page3Fragment.AddToGraphs(inData);
}
}
答案 0 :(得分:2)
这应该可以解决问题:
<link href="{{ asset('css/bootstrap.min.css') }}" rel="stylesheet">
答案 1 :(得分:1)
解析real numbers时应该使用正确的文化。见thread
关于你的任务,我会这样做:
var numbers = "0, 1.11, 2.22, -3.33, -4.44, 55.55, 66.66, -77.77, 8.88, 0"
.Split(new char [] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => double.Parse(x, CultureInfo.InvariantCulture)).ToArray();
编辑:
事情就是这个消息不会一下子传出来。因此,您需要创建一个缓冲区来存储数据,直到您拥有整个消息。
此外,如果您事先不知道消息的长度,则应将其作为消息的一部分发送,例如前4个字节(Int32)。