2011-08-13 76 views
0

我想寫一個程序,將使用telnet發送GPS座標。
我不斷收到以下異常:試圖發送GPS座標到android模擬器

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(); 
     } 

    } 

} 

回答

1

telnet.disconnect(); 

即將實施,所以你不會有輸出流寫入,因此NPE。你應該刪除該行。

+0

非常感謝你!!!!! – dewijones92

0

而不是使用本地主機,儘量10.0.2.2 - 這是IP地址的仿真器通常是上,但我不知道你是否能建立的telnet通訊科與模擬器。

編輯:這裏有一個link to telnet the emulator但它是從命令窗口 - 也許你可以寫一個小批處理腳本爲你的測試發送GPS座標,但如果你必須與你的跑步測試在某種程度上syncronise這一點,你必須從Android應用程序中執行此操作。它看起來像模擬器確實在本地主機上,你的'電腦'是10.0.2.2

+0

感謝,但仍然沒有工作壽 – dewijones92

+0

我得到一個java.net.ConnectException:操作超時就行的telnet 。 connect(「10.0.2.2」,5554); – dewijones92

0

當然使用10.0.2.2 iP,並確保你在清單中給予正確的權限..但仍然,如果你需要輸入long。和拉特。在另一個應用程序中使用它們......你並不需要telnet,對於模擬器來說,有一個叫做「Emulator Control」的小窗口,你可以手動輸入long。和拉特。但是使用與模擬器的telnet通信,這可能不會發生。而真正的手機上,你可以使用「NetwProvider.getLocation()」,但當然你不能測試模擬器上以及..

+0

我不喜歡手動輸入座標。 這個想法是創建測試來測試我的整個應用程序,它主要基於GPS的東西。所以當我按「測試」時,我希望所有測試都能運行,而且,我正在嘗試使這個程序(上圖)具有一切自動化功能。 這是做這件事的最好方法。謝謝 – dewijones92

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();