试图将GPS坐标发送到Android模拟器

时间:2011-08-13 09:07:46

标签: java android android-emulator telnet

我正在尝试编写一个使用telnet发送GPS坐标的程序 我一直得到以下例外:

Exception in thread "Timer-0" java.lang.NullPointerException
at org.apache.commons.net.telnet.Telnet._sendByte(Telnet.java:1060)
at org.apache.commons.net.telnet.TelnetOutputStream.write(TelnetOutputStream.java:87)
at org.apache.commons.net.io.ToNetASCIIOutputStream.write(ToNetASCIIOutputStream.java:77)
at org.apache.commons.net.io.ToNetASCIIOutputStream.write(ToNetASCIIOutputStream.java:111)
at java.io.PrintStream.write(PrintStream.java:430)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:85)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:168)
at java.io.PrintStream.write(PrintStream.java:477)
at java.io.PrintStream.print(PrintStream.java:619)
at java.io.PrintStream.println(PrintStream.java:756)
at com.example.myandroid.gpsSender$1.run(gpsSender.java:34)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)

我不知道为什么我会这样做。你能告诉我吗?谢谢 这是我的代码:

package com.example.myandroid;

import org.apache.commons.net.telnet.TelnetClient;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.SocketException;
import java.util.Timer;
import java.util.TimerTask;

public class gpsSender {
    private TelnetClient telnet = new TelnetClient();

    public static void main(String[] args) throws Exception {
        gpsSender client = new gpsSender();
        client.start();
    }

    public String start() throws Exception {

        // Connect to the specified server

        telnet.connect("localhost", 5554);

        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            float longitude = 1;
            float latitude = 1;
            int count = 0;
            PrintStream out = new PrintStream(telnet.getOutputStream());

            public void run() {
                out.println("geo fix " + String.valueOf(longitude) + " "
                        + String.valueOf(latitude));
                out.flush();
                System.out.println("geo fix " + String.valueOf(longitude) + " "
                        + String.valueOf(latitude));
                longitude++;
                latitude++;
                count++;
                if (count > 1000) {
                    cancel();
                }
            }
        }, 0, 1000);
        try {
            telnet.disconnect();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return ("Done");
    }

    public void write(String value) {
        try {

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

4 个答案:

答案 0 :(得分:1)

该行

 telnet.disconnect();

将要执行,因此您不会有要写入的输出流,因此NPE。你应该删除该行。

答案 1 :(得分:0)

尝试10.0.2.2而不是使用localhost,这是模拟器通常使用的IP地址,但我不确定您是否可以使用模拟器建立telnet通信。

编辑:这是一个link to telnet the emulator,但是它来自一个命令窗口 - 也许您可以为测试编写一个小批量脚本来发送gps坐标但是如果你必须以某种方式同步这个你的跑步测试,你必须从Android应用程序。看起来模拟器确实在localhost上,你的'pc'在10.0.2.2

答案 2 :(得分:0)

当然使用10.0.2.2 iP并确保您在清单中提供了正确的权限..但是,如果您需要输入long。和拉特。在另一个应用程序中使用它们...你真的不需要telnet和模拟器有一个叫做“模拟器控制”的小窗口,你手动输入长。和拉特。但是使用与模拟器的telnet通信,这可能不会发生。在真正的手机上你可以使用“NetwProvider.getLocation()”但当然你也无法在模拟器上测试它..

答案 3 :(得分:0)

感谢您发布此问题。这种方法让我可以在Robotium测试中轻松操作仿真器的硬件和传感器。这是一个代码片段,用于将仿真器的电池电量设置为100%:

TelnetClient telnet = new TelnetClient();
telnet.connect("10.0.2.2",5554);
PrintStream out = new PrintStream(telnet.getOutputStream());
out.println("power capacity 100");
out.flush();    
telnet.disconnect();