簡體   English   中英

試圖將 GPS 坐標發送到 android 仿真器

[英]Trying to send GPS coordinates to the android emulator

我正在嘗試編寫一個程序,該程序將使用 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();
        }

    }

}

 telnet.disconnect();

將要執行,所以你不會有 output stream 要寫入,因此是 NPE。 您應該刪除該行。

感謝您發布此問題。 這種方法讓我可以在我的 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();

不要使用 localhost,而是嘗試 10.0.2.2 - 那是模擬器通常打開的 IP 地址,但我不確定您是否可以使用模擬器建立 telnet 通信。

編輯:這是一個遠程登錄模擬器的鏈接,但它來自命令 window - 也許你可以為你的測試編寫一個小批處理腳本來發送 gps 坐標但是如果你必須以某種方式與你的運行測試同步,你必須這樣做來自 Android 應用程序。 看起來模擬器確實在本地主機上,而您的“電腦”在 10.0.2.2 上

當然使用 10.0.2.2 iP 並確保您在清單中提供正確的權限..但是,如果您需要輸入長。 和緯度。 在另一個應用程序中使用它們..你真的不需要telnet,對於模擬器,有一個叫做“模擬器控制”的小window,你可以手動輸入長。 和緯度。 但是使用與模擬器的 telnet 通信,這可能不會發生。 在真正的手機上,你可以使用“NetwProvider.getLocation()”,但當然你也不能在模擬器上測試它..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM