Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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
ClassCastException:java.lang.Object[]不能强制转换为java.lang.Double_Java_Android_Exception - Fatal编程技术网

ClassCastException:java.lang.Object[]不能强制转换为java.lang.Double

ClassCastException:java.lang.Object[]不能强制转换为java.lang.Double,java,android,exception,Java,Android,Exception,我的代码有点问题。我有一个包含数据的哈希映射。我想从散列表中获取数据,到目前为止一切正常,直到我尝试获取点的坐标。我创建了一个名为“Segments”的类,它包含一个字符串“name”和一个双精度数组(经度-纬度)。它应该用哈希表中的数据填充变量。在调试模式下,我看到了经度和纬度的元素,但它没有将它们放入我指定的数组中,并打印出一个错误: “ClassCastException:java.lang.Object[]不能强制转换为java.lang.Double” 这是我的密码 publi

我的代码有点问题。我有一个包含数据的哈希映射。我想从散列表中获取数据,到目前为止一切正常,直到我尝试获取点的坐标。我创建了一个名为“Segments”的类,它包含一个字符串“name”和一个双精度数组(经度-纬度)。它应该用哈希表中的数据填充变量。在调试模式下,我看到了经度和纬度的元素,但它没有将它们放入我指定的数组中,并打印出一个错误:

“ClassCastException:java.lang.Object[]不能强制转换为java.lang.Double”

这是我的密码

    public class Segments 
 {
    public String name;
    public double[] latitude;
    public double[] longitude;

    public void Read(HashMap<String,Object> segment)
    {
        this.name = (String) segment.get("name");       

        Object[] coord = (Object[]) segment.get("coordinates");
        try
        {
            for(int i = 0; i < coord.length; i++)
            {

                latitude[i] = (Double)coord[0];
                longitude[i] = (Double)coord[1];            
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }
公共类段
{
公共字符串名称;
公共双[]纬度;
公共双[]经度;
公共无效读取(哈希映射段)
{
this.name=(String)segment.get(“name”);
对象[]坐标=(对象[])段。获取(“坐标”);
尝试
{
for(int i=0;i

您能告诉我我做错了什么,以及如何修复代码吗?

您正在尝试将一个基本对象强制转换为一个对象

您可以尝试将值do Double或cast更改为Double[]

这也是一个非常常见的错误,请记住,在Java中,所有原语都不扩展对象

请尝试以下代码:

public class Segments 
   {
    public String name;
    public Double[] latitude;
    public Double[] longitude;


public void Read(HashMap<String,Object> segment)
{
    this.name = (String) segment.get("name");       


Double[] coord = (Double[]) segment.get("coordinates");

    try
    {
        for(int i = 0; i < coord.length; i++)
        {

            latitude[i] = coord[0];
            longitude[i] = coord[1];            
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

  }
公共类段
{
公共字符串名称;
公共双[]纬度;
公共双[]经度;
公共无效读取(哈希映射段)
{
this.name=(String)segment.get(“name”);
Double[]坐标=(Double[])段。获取(“坐标”);
尝试
{
for(int i=0;i
我认为主要问题是您的
坐标数组不包含坐标,而是包含坐标数组。因此正确的解决方法是:

for(int i = 0; i < coord.length; i++)
{

    latitude[i] = (Double)coord[i][0];
    longitude[i] = (Double)coord[i][1];            
}


伙计们,我找到了解决方案,当然感谢你们的帮助,你们为我指出了正确的方法。解决方案是,我必须声明数组的大小,数组(纬度、经度)必须是“double”而不是“double”,因此要填充数组(纬度、经度),代码必须如下所示:

public class Segments 
{
public String name;
public double[] latitude;
public double[] longitude;


public void Read(HashMap<String,Object> segment)
{
    this.name = (String) segment.get("name");       

    Object[] coord = (Object[]) segment.get("coordinates");
    //Object[] coord2 = new Object[coord.length]; 
    latitude = new double[coord.length];
    longitude = new double[coord.length];

    try
    {
        for(int i = 0; i < coord.length; i++)
        {   
            latitude[i] = (Double)((Object[])coord[i])[0];
                longitude[i] = (Double)((Object[])coord[i])[1];                     
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

}
公共类段
{
公共字符串名称;
公共双[]纬度;
公共双[]经度;
公共无效读取(哈希映射段)
{
this.name=(String)segment.get(“name”);
对象[]坐标=(对象[])段。获取(“坐标”);
//Object[]coord2=新对象[coord.length];
纬度=新双精度[坐标长度];
经度=新双精度[坐标长度];
尝试
{
for(int i=0;i

}

coord[0]的值是多少?
的值是从哈希表接收的,它包含经度和纬度(双值)。它有两个元素经度和纬度。您用于填充线段地图的代码是什么?很抱歉,我不明白,您可以用代码显示给我吗?当您将变量声明为公共双精度[]时,请使用
Double
latitude;现在for循环被跳过,并且从未到达;要么是,要么coord包含其他类型的对象。@Paul Jan可能,尽管不是这样,但他的整个逻辑是有缺陷的。他在coord数组上循环,将第一个元素分配给lat,第二个元素分配给long-反复。但是如果coord是两个元素的数组,那又怎么样是循环点还是赋值点?错误:表达式的类型必须是数组类型,但解析为Object@user3182266您可能需要将显式强制转换添加到
coord[i]
。我用一些选项更新了我的答案。
latitude[i] = ((double[])coord[i])[0];
longitude[i] = ((double[])coord[i])[1];            
latitude[i] = (Double)((Object[])coord[i])[0];
longitude[i] = (Double)((Object[])coord[i])[1];            
public class Segments 
{
public String name;
public double[] latitude;
public double[] longitude;


public void Read(HashMap<String,Object> segment)
{
    this.name = (String) segment.get("name");       

    Object[] coord = (Object[]) segment.get("coordinates");
    //Object[] coord2 = new Object[coord.length]; 
    latitude = new double[coord.length];
    longitude = new double[coord.length];

    try
    {
        for(int i = 0; i < coord.length; i++)
        {   
            latitude[i] = (Double)((Object[])coord[i])[0];
                longitude[i] = (Double)((Object[])coord[i])[1];                     
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

}