私はJ2MEでGPSベースのアプリを開発しています。私はGoogleAPIコーディングの初心者です。たとえば、上、下、ズーム、ズームアウトなど、次々にマップするコマンドを実行すると、Google Static Map APIで、このコードで次のエラーが発生します- inputStream = connection.openInputStream();
:
java.io.IOException:使用可能な応答エントリがありません
ヌル
at com.sun.midp.io.InternalConnector.openPrim(+157)
at com.sun.midp.io.InternalConnector.openInternal(+9)
at com.sun.midp.io.j2me.http.Protocol.connect_wap(+210)
at com.sun.midp.io.j2me.http.Protocol.connect(+107)
at com.sun.midp.io.j2me.http.Protocol.openInputStream(+64)
at midletgps.GoogleMaps.run(GoogleMaps.java:90)
このエラーの意味は何ですか?どのように解決すればよいですか?Plzは私を助けます..私はこの問題のためにここで立ち往生しました...
私の接続コードは次のとおりです:
//the query string for the Google service
String url = "http://maps.google.com/maps/api/staticmap?center=";
url += latitude + "," + longitude;
url += "&zoom=" + String.valueOf(zoom);
url += "&size=" + width + "x" + height + "&maptype=hybrid" +"&sensor=true" + "&key=API key";
try
{
connection = (HttpConnection)Connector.open(url);
connection.setRequestMethod(HttpConnection.GET);
inputStream = connection.openInputStream();
map = Image.createImage(inputStream);
setImage(map);
iserror=false;
repaint();
midGPS.displayMap();
}
catch (Exception ex)
{
iserror=true;
ex.printStackTrace();
}
finally
{
try
{
if (connection != null)
{
connection.close();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
私は言われたようにコードを開発しましたが、問題はまだ残っています。コードは
String url = "http://maps.googleapis.com/maps/api/staticmap?center=";
url += latitude + "," + longitude;
url += "&zoom=" + String.valueOf(zoom);
url += "&size=" + width + "x" + height + "&maptype=hybrid" +"&sensor=true" + "&key=API key";
try
{
Image logo = null;
byte[] imagedata;`
connection = (ContentConnection)Connector.open(url);
inputStream = connection.openDataInputStream();
int len = (int) connection.getLength();
if(len != -1)
{
imagedata = new byte[len];
//get the image into byte
inputStream.readFully(imagedata);
}
else //length not available
{
byteArray = new ByteArrayOutputStream();
int c;
while ((c = inputStream.read()) != -1)
{
byteArray.write(c);
}
imagedata = byteArray.toByteArray();
byteArray.close();
}
//create an Image object
logo = Image.createImage(imagedata, 0, imagedata.length);
setImage(logo);
iserror=false;
repaint();
midGPS.displayMap();
}
catch (Exception ex)
{
iserror=true;
ex.printStackTrace();
//showError("Error message : " + ex.getMessage());
}
finally
{
try
{
if (connection != null)
{
connection.close();
}
if (inputStream != null)
{
inputStream.close();
}
if (byteArray != null)
{
connection.close();
}
}
catch (Exception ex)
{
showError("Error message : " + ex.getMessage());
}
}
次のようなグーグルマップの私の完全なコード-
public class GoogleMaps extends Canvas implements CommandListener, Runnable
{
//get the width and the height of the screen
int width = getWidth();
int height = getHeight();
Image map;
Command cmdBack = new Command("Back", Command.EXIT, 1);
Command cmdRefresh = new Command("Refresh", Command.SCREEN, 1);
MidletGPS midGPS; //reference to the parent MIDlet
int zoom = 17;
String latitude = "";
String longitude = "";
ContentConnection connection = null;
DataInputStream inputStream = null;
ByteArrayOutputStream byteArray = null;
Thread t;
boolean iserror = true;
Alert error;`
public GoogleMaps(MidletGPS mGPS, String Lat, String Longit)
{
//only for testing
latitude = "19.021531";
longitude = "72.848432";
//latitude = Lat;
//longitude = Longit;
midGPS = mGPS;
this.addCommand(cmdBack);
this.addCommand(cmdRefresh);
this.setCommandListener(this);
runThread();
}
public void runThread()
{
t = new Thread(this);
t.start();
}
public void setImage(Image image)
{
map = image;
}
public void paint(Graphics g)
{
//Paints only, if the search succeeded in returning a location
if(!iserror)
{
g.drawImage(map, width/2, height/2, Graphics.HCENTER | Graphics.VCENTER);
}
}
public void commandAction(Command c, Displayable d)
{
if (c == cmdBack)
{
midGPS.setCurrentForm(midGPS.mainForm);
}
if (c == cmdRefresh)
{
runThread();
this.repaint();
}
}
public void run()
{
//the query string for the Google service
String url = "http://maps.googleapis.com/maps/api/staticmap?center=";
url += latitude + "," + longitude;
url += "&zoom=" + String.valueOf(zoom);
url += "&size=" + width + "x" + height + "&maptype=hybrid" +"&sensor=true" + "&key=API KEY";
try
{
Image logo = null;
byte[] imagedata;
connection = (ContentConnection)Connector.open(url);
if(inputStream.read() != -1)
{
inputStream = connection.openDataInputStream();
}
else
{
}
int len = (int) connection.getLength();
if(len != -1)
{
imagedata = new byte[len];
//get the image into byte
inputStream.readFully(imagedata);
}
else //length not available
{
byteArray = new ByteArrayOutputStream();
int c;
while ((c = inputStream.read()) != -1)
{
byteArray.write(c);
}
imagedata = byteArray.toByteArray();
byteArray.close();
}
//create an Image object
logo = Image.createImage(imagedata, 0, imagedata.length);
setImage(logo);
iserror=false;
repaint();
midGPS.displayMap();
}
catch (Exception ex)
{
iserror=true;
ex.printStackTrace();
//showError("Error message : " + ex.getMessage());
}
finally
{
try
{
if (connection != null)
{
connection.close();
}
if (inputStream != null)
{
inputStream.close();
}
if (byteArray != null)
{
byteArray.close();
}
}
catch (Exception ex)
{
showError("Error message : " + ex.getMessage());
}
}
}
protected void keyPressed(int keyCode)
{
if (((char) keyCode) == '1')
{
zoom--;
}
if (((char) keyCode) == '3')
{
zoom++;
}
//if you want to move the map in all directions
double offset = 0.02;
if (getGameAction(keyCode) == 5)
{
double lon = (Double.parseDouble(longitude));
lon += offset / zoom;
longitude = String.valueOf(lon);
}
if (getGameAction(keyCode) == 2)
{
double lon = (Double.parseDouble(longitude));
lon -= offset / zoom;
longitude = String.valueOf(lon);
}
if (getGameAction(keyCode) == 4)
{
double lat = (Double.parseDouble(latitude));
lat += offset / zoom;
latitude = String.valueOf(lat);
}
if (getGameAction(keyCode) == 6)
{
double lat = (Double.parseDouble(latitude));
lat -= offset / zoom;
latitude = String.valueOf(lat);
}
// re-Call connection thread
runThread();
//call the paint event
//this.repaint();
}
void showError(String message)
{
error = new Alert("Error", message, null, AlertType.ERROR);
error.setTimeout(error.getDefaultTimeout());
Display.getDisplay(midGPS).setCurrent(error, midGPS.mainForm);
}
}