2

我怎样才能摆脱编译错误?

sendBroadcast(intent);

此方法在我制作的另一个应用程序中运行良好,但是在当前应用程序中存在编译错误。红色下划线有错误消息“未定义新 Runnable 类型”

sendBroadcast() 是 Context 类的一部分,而不是 Intent 类。

  public class Server {  // external class

  public class ServerThread implements Runnable {  // nested class

  public void run() {
        try {
            if (SERVERIP != null) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        serverStatus = "Listening on IP: " + SERVERIP;
                    }
                });
                serverSocket = new ServerSocket(SERVERPORT);
                while (true) {
                    // listen for incoming clients
                    Socket client = serverSocket.accept();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            Intent intent = new Intent();
                            intent.setAction("com.example.AudioPlay");
                            intent.putExtra("serverStatus","Connected");
                                sendBroadcast(intent);
                        }
                    });

<<<< 编辑 >>>>

我将问题的焦点更改为编译错误。该方法在其他应用程序中运行良好。正是在这种特殊情况下,我对编译错误感到困惑。

4

2 回答 2

3

要访问sendBroadcast未扩展 Activity、服务或其他应用程序组件的类中的方法,您需要使用类构造函数将组件上下文传递给它:

public class ServerThread implements Runnable {  // nested class

Context context;  //<< declare context here

public ServerThread(Context context){
  this.context=context;
}
  public void run() {

       handler.post(new Runnable() {
           @Override
             public void run() {
                  Intent intent = new Intent();
                  intent.setAction("com.example.AudioPlay");
                  intent.putExtra("serverStatus","Connected");
                   // use context for calling sendBroadcast
                  context.sendBroadcast(intent);
               }
    });

并像从 Activity 一样传递上下文:

ServerThread serverth=new ServerThread(Your_Current_Activity.this);
于 2013-02-04T07:06:30.173 回答
0

对不起这个问题,这太容易了。发布后几秒钟我意识到我的错误。

 Intent intent = new Intent();
 intent.setAction("com.exmaple.AudioPlay");
 intent.putExtra("serverStatus","Connected");
 mContext.sendBroadcast(intent);

在另一个班级:

 Server serv = new Server(getApplicationContext());
于 2013-02-04T07:07:48.860 回答