首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SendData不是抽象的,也不覆盖ReceivedDataListener中的抽象方法returnData(byte[],字节)。

SendData不是抽象的,也不覆盖ReceivedDataListener中的抽象方法returnData(byte[],字节)。
EN

Stack Overflow用户
提问于 2014-07-31 15:05:12
回答 1查看 317关注 0票数 0

我的一些代码有点问题,需要一些帮助!

在这一行代码中,我得到了以下错误:

代码语言:javascript
复制
public class SendData implements ReceivedDataListener {

错误是

错误:(16,8)错误: SendData不是抽象的,也不覆盖ReceivedDataListener中的抽象方法returnData(byte[],字节)

我的ReceivedDataListener代码如下所示:

代码语言:javascript
复制
package com.commandsoftware.androidbookingapp.Services.Communications;

public interface ReceivedDataListener {
    void returnData(byte[] incomingData, byte commsIdentifier);
}

SendData看起来是这样的:

代码语言:javascript
复制
package com.commandsoftware.androidbookingapp.Services.Communications;

import android.app.Activity;
import android.app.Service;
import android.content.Context;

import com.commandsoftware.androidbookingapp.Services.Communications.ReceivedDataListener;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

/**
 * Created by Anthony on 29/07/2014.
 */
public class SendData implements ReceivedDataListener {

    public static byte[] stringToData(String str, byte varID) {
        int strLength = str.length();
        byte[] varData = new byte[strLength];
        byte[] varHeader = new byte[]
                { varID, (byte) (strLength & 0xff) };
        try
        {
            varData = str.getBytes("ASCII");
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
        byte[] message = new byte[varHeader.length + varData.length];
        System.arraycopy(varHeader, 0, message, 0, varHeader.length);
        System.arraycopy(varData, 0, message, varHeader.length, varData.length);
        return message;
    }

    public static byte[] intToData(int number, byte varID, int varLength) {
        byte[] message = new byte[varLength + 2];
        message[0] = varID;
        message[1] = (byte) (varLength & 0xff);
        switch (varLength)
        {
            case ProcessData.ONE_BYTE:
                message[2] = (byte) (number & 0xff);
                break;
            case ProcessData.TWO_BYTES:
                message[2] = (byte) (number >> 8);
                message[3] = (byte) (number & 0xff);
                break;
            case ProcessData.FOUR_BYTES:
                message[2] = (byte) (number >> 24);
                message[3] = (byte) (number >> 16);
                message[4] = (byte) (number >> 8);
                message[5] = (byte) (number & 0xff);
                break;
        }
        return message;
    }

    public static byte[] calculateLength(byte[] message, int noVariables) {
        int packetLen = message.length;
        byte[] lengthBytes =
                { (byte) (packetLen >> 8), (byte) (packetLen & 0xff), (byte) (noVariables & 0xff) };
        return lengthBytes;
    }

    public static byte[] calculateChecksum(byte[] message) {
        int val = 0;
        for (int i = 0; i < message.length; i++)
        {
            val += (message[i] & 0xff);
        }
        int mod = val % 65536;
        byte[] checksumBytes =
                { (byte) (mod >> 8), (byte) (mod & 0xff) };
        return checksumBytes;
    }

    public static byte[] addHeaders(ArrayList<byte[]> array, byte headerByte) {
        // splitting back ArrayList into bytes
        int sum = 0;
        for (byte[] ba : array)
        {
            sum = sum + ba.length;
        }

        byte[] finalbuf = new byte[sum];
        int curpos = 0;
        for (byte[] ba : array)
        {
            System.arraycopy(ba, 0, finalbuf, curpos, ba.length);
            curpos = curpos + ba.length;
        }

        byte[] lengthBytes = calculateLength(finalbuf, array.size() - 1);
        byte[] messageWithLen = Comms.bytesAppend(lengthBytes, finalbuf);
        byte[] chkSumBytes = calculateChecksum(messageWithLen);
        byte[] messageWithCkSum = Comms.bytesAppend(chkSumBytes, messageWithLen);
        byte[] header =
                { (byte) 0xaa, (byte) 0xcc, (byte) 0x88, headerByte };
        byte[] finalMessage = Comms.bytesAppend(header, messageWithCkSum);

        StringBuilder sentBytes = new StringBuilder();
        for (byte cha : finalMessage)
        {
            StringBuilder sb = Comms.byteToText(cha);
            sentBytes.append(sb);
        }
        return finalMessage;
    }


    public void CalculateFare(int FromEasting, int FromNorthing, int ToEasting, int ToNorthing, Activity callingActivity, final Context ctx)
    {
        ArrayList<byte[]> fareByteArrays = new ArrayList<byte[]>();
        // from X
        byte[] data1 = intToData(FromEasting, (byte) 0x01, 4);
        fareByteArrays.add(data1);

        // from Y
        byte[] data2 = intToData(FromNorthing, (byte) 0x02, 4);
        fareByteArrays.add(data2);

        // to X
        byte[] data3 = intToData(ToEasting, (byte) 0x03, 4);
        fareByteArrays.add(data3);

        // to Y
        byte[] data4 = intToData(ToNorthing, (byte) 0x04, 4);
        fareByteArrays.add(data4);

        // vehicletype
        byte[] data5 = stringToData("0", (byte) 0x05);
        fareByteArrays.add(data5);

        // add ff
        byte[] data6 =
                { (byte) 0xff };
        fareByteArrays.add(data6);

        byte[] finalFareMessage = addHeaders(fareByteArrays, (byte) 0xf1);
        Comms conn = new Comms(finalFareMessage, callingActivity, ctx);
        conn.startLongRunningOperation();
    }
}

不太确定这是否相关,但这是我的android清单:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.commandsoftware.androidbookingapp" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".Activity.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

非常感谢你提前提供的帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-31 15:09:49

您必须在您的void returnData(byte[] incomingData, byte commsIdentifier)类中为SendData提供一个实现,因为您正在实现该接口。

将以下内容添加到SendData类中

代码语言:javascript
复制
@Override
public void returnData(byte[] incomingData, byte commsIdentifier) {
    // Your implementation goes here
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25062454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档