Попытка отправить GPS-координаты в эмулятор Android - PullRequest
0 голосов
/ 13 августа 2011

Я пытаюсь написать программу, которая будет отправлять координаты GPS с помощью telnet.
Я продолжаю получать следующее исключение:

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 ]

1 голос
/ 13 августа 2011

Будет выполняться строка

 telnet.disconnect();

, поэтому у вас не будет выходного потока для записи, следовательно, NPE.Вы должны удалить эту строку.

0 голосов
/ 15 ноября 2013

Спасибо за публикацию этого вопроса. Этот подход позволяет мне легко манипулировать оборудованием и датчиками эмулятора из моих тестов 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();
0 голосов
/ 13 августа 2011

Конечно, используйте iP 10.0.2.2, а также убедитесь, что вы даете правильные разрешения в своем манифесте ... но все же, если вам нужно ввести длинный.и лат.использовать их в другом приложении .. вам не нужен telnet, а для эмулятора есть небольшое окно под названием «Управление эмулятором», в котором вы вводите длинную вручную.и лат.но при использовании telnet-связи с эмулятором этого, вероятно, не происходит.и на реальном телефоне вы можете использовать NetwProvider.getLocation (), но, конечно, вы не можете проверить это и на эмуляторе.

0 голосов
/ 13 августа 2011

Вместо использования localhost, попробуйте 10.0.2.2 - это IP-адрес, на котором обычно работает эмулятор, но я не уверен, что вы можете установить связь через telnet с эмулятором.

Редактировать: Вот ссылка для telnet эмулятора , но это из командного окна - возможно, вы могли бы написать небольшой пакетный скрипт для ваших тестов для отправки координат GPS, но если вам нужно как-то синхронизировать это с вашим текущим тестом,вам придется сделать это из приложения для Android.Похоже, что эмулятор действительно находится на localhost, а ваш 'pc' - на 10.0.2.2

...