2011-08-13 4 views
0

J'essaye d'écrire un programme qui enverra des coordonnées GPS en utilisant telnet.
Je continue à recevoir l'exception suivante:Essayer d'envoyer les coordonnées GPS à l'émulateur 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) 

Je ne sais pas pourquoi je reçois ce. Peux-tu me dire s'il te plait? grâce Voici mon code:

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

    } 

} 

Répondre

1

La ligne

telnet.disconnect(); 

va exécuter, donc vous n'aurez pas de flux de sortie à écrire, d'où le NPE. Vous devriez supprimer cette ligne.

+0

merci beaucoup !!!!! – dewijones92

0

Au lieu d'utiliser localhost, essayez 10.0.2.2 - qui est l'adresse IP de l'émulateur est habituellement, mais je ne sais pas si vous pouvez établir comms telnet avec l'émulateur.

Edit: Voici un link to telnet the emulator mais il est d'une fenêtre de commande - vous pourriez peut-être écrire un petit script batch pour vos tests pour envoyer les coordonnées GPS, mais si vous devez syncronise ce en quelque sorte avec votre test de fonctionnement, vous devez faites-le depuis l'application Android. Il semble que l'émulateur est en effet sur localhost et votre 'pc' est sur 10.0.2.2

+0

Merci, il ne fonctionne toujours pas tho – dewijones92

+0

je reçois un java.net.ConnectException: opération a expiré sur le telnet ligne. connect ("10.0.2.2", 5554); – dewijones92

0

Bien sûr Utilisez l'iP 10.0.2.2 et assurez-vous que vous donnez les bonnes permissions dans votre manifeste .. mais quand même, si vous avez besoin d'entrer le long. et lat. pour les utiliser dans une autre application .. vous n'avez pas vraiment besoin de telnet et pour l'émulateur il y a une petite fenêtre appelée "Emulator Control" où vous entrez manuellement le long. et lat. mais en utilisant la communication telnet avec l'émulateur, cela ne se produit probablement pas. et sur un vrai téléphone, vous pouvez utiliser la fonction « NetwProvider.getLocation() » mais bien sûr vous ne pouvez pas tester que sur un émulateur ainsi ..

+0

Je ne souhaite pas entrer manuellement les coordonnées. L'idée est de créer des tests pour tester l'ensemble de mon application, qui est basée principalement sur des trucs GPS. Donc quand j'appuie sur "test" je veux que tous mes tests se déroulent, aussi, ce programme (ci-dessus) que j'essaie de faire, pour que tout soit automatisé. Quelle est la meilleure façon de le faire. Merci – dewijones92

0

Merci d'avoir publié cette question. Cette approche me permet de manipuler facilement le matériel et les capteurs de l'émulateur à partir de mes tests Robotium. Voici un extrait de code pour définir la charge de la batterie de l'émulateur à 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(); 
Questions connexes