gpt4 book ai didi

android - 应用程序崩溃 - Web 服务没有返回

转载 作者:行者123 更新时间:2023-12-02 01:36:55 30 4
gpt4 key购买 nike

所以我开发了这个应用程序来访问设备上的谷歌地图。之后,它读取设备上可见屏幕的角坐标(左上角和右下角),并将值存储在变量 xmin xmax ymin 和 ymax 中。现在这些值被传递给网络服务,

http://hiscentral.cuahsi.org/webservices/hiscentral_1_1.asmx/GetSeriesCatalogForBox2

与代码中提到的其他参数一起获取需要在该区域绘制的注释的坐标。

现在是硬编码值,例如,

 xmin= -100
ymin= -99
xmax= 40
ymax= 41

程序工作正常,输出是一个已解析的 xml,并绘制了注释,但是当我尝试使用 map 上可见的角坐标时,其值为,

40338927
-99388178
40347297
-99399164

网络服务没有返回。这会使应用程序崩溃。我不想让它崩溃,但没有绘制出任何表明该区域内没有车站的信息。我怎样才能做到这一点。

请帮忙,

提前致谢

代码:

AndroidTestActivity.java

public class AndroidTestActivity extends MapActivity 
{
/** Called when the activity is first created. */
ArrayList<String> arrlat_long = new ArrayList<String>();
ArrayList<String> arrlat_lat = new ArrayList<String>();
ArrayList<String> d = new ArrayList<String>();
private static final String ACTION_RECV_MSG = "com.imrankhanandroid.intent.action.RECEIVE_MESSAGE";
private static final String ACTION_OTHER_MSG = "com.imrankhanandroid.intent.action.OTHER_MESSAGE";
MapView mapView;
private MessageReceiver receiver ;
private MapController mapController;
double topLat;
double topLon;
double bottomLat;
double bottomLon;
String strtest,strtest1,strtest2,strtest3;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
mapController.setZoom(8);


Projection proj = mapView.getProjection();
GeoPoint topLeft = proj.fromPixels(0, 0);
GeoPoint bottomRight = proj.fromPixels(mapView.getWidth()-1, mapView.getHeight()-1);
topLat = topLeft.getLatitudeE6()/1E6;
topLon = topLeft.getLongitudeE6()/1E6;
bottomLat = bottomRight.getLatitudeE6()/1E6;
bottomLon = bottomRight.getLongitudeE6()/1E6;
int n= ((int) (topLat*1E6));

int n1= ((int) (topLon*1E6));

int n2= ((int) (bottomLat*1E6));

int n3= ((int) (bottomLon*1E6));

strtest=Integer.toString(n)+"/"+Integer.toString(n1)+"/"+Integer.toString(n2)+"/"+Integer.toString(n3);
Log.d("strtest strtest", "strtest strtest = "+strtest);
Intent msgIntent = new Intent(AndroidTestActivity.this,Intentservice.class);
msgIntent.putExtra("strtest", strtest); //arrlat_long
startService(msgIntent);




//Dynamic registration Receiver
IntentFilter filter = new IntentFilter(ACTION_RECV_MSG);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new MessageReceiver();
registerReceiver(receiver, filter);
IntentFilter filter2 = new IntentFilter(ACTION_OTHER_MSG);
filter2.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new MessageReceiver();
registerReceiver(receiver, filter2);
}
//Broadcast to receive
public class MessageReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
arrlat_long = intent.getStringArrayListExtra("codnt");
arrlat_lat = intent.getStringArrayListExtra("codntlat");
// text.setText(message);
Toast.makeText(context, arrlat_long.get(0),Toast.LENGTH_SHORT).show();
testoverlay();
}
}
public void testoverlay()
{
for(int i=0;i<arrlat_long.size();i++)
{

List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.mapmarker);
HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this);
float lat = Float.parseFloat(arrlat_lat.get(i));
float lng = Float.parseFloat(arrlat_long.get(i));
GeoPoint point = new GeoPoint((int)(lat * 1E6), (int)(lng * 1E6));
OverlayItem overlayitem = new OverlayItem(point, "", "");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);

}

}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}

HelloItemizedOverlay.java

public class HelloItemizedOverlay extends ItemizedOverlay<OverlayItem>
{
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
private Context mContext;

public HelloItemizedOverlay(Drawable defaultMarker, Context context)
{
super(boundCenterBottom(defaultMarker));
mContext = context;
}

public void addOverlay(OverlayItem overlay)
{
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i)
{
return mOverlays.get(i);
}
@Override
public int size()
{
return mOverlays.size();
}
@Override
protected boolean onTap(int index)
{

return true;
}
}

IntentService.java

public class Intentservice extends IntentService 
{
private static final String ACTION_RECV_MSG = "com.imrankhanandroid.intent.action.RECEIVE_MESSAGE";
private static final String ACTION_OTHER_MSG = "com.imrankhanandroid.intent.action.OTHER_MESSAGE";
ArrayList<String> arrlat_long = new ArrayList<String>();
ArrayList<String> arrlat_lat = new ArrayList<String>();
public static String str="";
public static String str1="";
int n=0;
String responseBody;
Integer topLat=0;
Integer topLon=0;
Integer bottomLat=0;
Integer bottomLon=0;
ArrayList<String> a= new ArrayList<String>();
ArrayList<String> b= new ArrayList<String>();
ArrayList<String> c= new ArrayList<String>();
ArrayList<String> d= new ArrayList<String>();
MapView mapView;
private MessageReceiver receiver;


public Intentservice()
{
super("Intentservice");
// TODO Auto-generated constructor stub
}

@Override
protected void onHandleIntent(Intent intent)
{
String strxmin,xmax,ymin,ymax;
String str=intent.getExtras().getString("strtest");
Log.d("onHandleIntent", "onHandleIntent onHandleIntent= "+str);
String[] arrtelog=str.split("/");
strxmin=arrtelog[0];
xmax=arrtelog[1];
ymin=arrtelog[2];
ymax=arrtelog[3];

// strxmin=str;
// xmax=str1;
// ymin=str2;
// ymax=str3;

// TODO Auto-generated method stub
HttpClient httpclient = new DefaultHttpClient();
String Url = "http://hiscentral.cuahsi.org/webservices/hiscentral_1_1.asmx/GetSeriesCatalogForBox2";
if(!Url.endsWith("?"))
{
Url += "?";
}

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);
nameValuePairs.add(new BasicNameValuePair("xmin",xmax));
nameValuePairs.add(new BasicNameValuePair("xmax", ymax));
nameValuePairs.add(new BasicNameValuePair("ymin", "40"));
nameValuePairs.add(new BasicNameValuePair("ymax", "41"));
nameValuePairs.add(new BasicNameValuePair("networkIDs", ""));
nameValuePairs.add(new BasicNameValuePair("conceptKeyword", "precipitation"));
nameValuePairs.add(new BasicNameValuePair("beginDate", "1/1/2009"));
nameValuePairs.add(new BasicNameValuePair("endDate", "1/1/2010"));
String paramString = URLEncodedUtils.format(nameValuePairs, "utf-8");
Url += paramString;
try
{
HttpPost httppost = new HttpPost(Url);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
responseBody = EntityUtils.toString(response.getEntity());
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setValidating(false);
XmlPullParser myxml = factory.newPullParser();
InputStream raw = new ByteArrayInputStream(responseBody.getBytes());
myxml.setInput(raw, null);
int eventType = myxml.getEventType();

while(eventType != XmlPullParser.END_DOCUMENT)
{
if(eventType == XmlPullParser.START_DOCUMENT)
{

Log.d("ParseXmlActivity", "In start document");
}
else if(eventType == XmlPullParser.START_TAG)
{
if (myxml.getName().equals("latitude"))
{
str="";
str = myxml.nextText().toString();
Log.d("ParseXmlActivity", "In start tag = "+str);
arrlat_lat.add(str);
}
if (myxml.getName().equals("longitude"))
{
str = myxml.nextText().toString();
Log.d("ParseXmlActivity", "In start tag = "+str);
arrlat_long.add(str);
}

}

eventType = myxml.next();

} }
catch (XmlPullParserException e)
{
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

IntentFilter filter = new IntentFilter(ACTION_RECV_MSG);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new MessageReceiver();
registerReceiver(receiver, filter);



Log.d("TEST TESTTEST", "In start TESTTEST = "+arrlat_long.get(0)+" $$$ "+arrlat_long.size());
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(ACTION_RECV_MSG);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
broadcastIntent.putStringArrayListExtra("codnt", arrlat_long); //arrlat_long
broadcastIntent.putStringArrayListExtra("codntlat", arrlat_lat); //arrlat_lat
sendBroadcast(broadcastIntent);
}

日志猫是,

    06-29 18:37:18.786: W/dalvikvm(1344): threadid=12: thread exiting with uncaught exception (group=0x409c01f8)
06-29 18:37:18.796: E/AndroidRuntime(1344): FATAL EXCEPTION: IntentService[Intentservice]
06-29 18:37:18.796: E/AndroidRuntime(1344): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
06-29 18:37:18.796: E/AndroidRuntime(1344): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
06-29 18:37:18.796: E/AndroidRuntime(1344): at java.util.ArrayList.get(ArrayList.java:304)
06-29 18:37:18.796: E/AndroidRuntime(1344): at com.imrankhanandroid.Androidtest.Intentservice.onHandleIntent(Intentservice.java:157)
06-29 18:37:18.796: E/AndroidRuntime(1344): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
06-29 18:37:18.796: E/AndroidRuntime(1344): at android.os.Handler.dispatchMessage(Handler.java:99)
06-29 18:37:18.796: E/AndroidRuntime(1344): at android.os.Looper.loop(Looper.java:137)
06-29 18:37:18.796: E/AndroidRuntime(1344): at android.os.HandlerThread.run(HandlerThread.java:60)
06-29 18:37:19.086: D/dalvikvm(1344): GC_CONCURRENT freed 168K, 3% free 10132K/10375K, paused 4ms+4ms
06-29 18:37:20.527: E/ActivityThread(1344): Activity com.imrankhanandroid.Androidtest.AndroidTestActivity has leaked IntentReceiver com.imrankhanandroid.Androidtest.AndroidTestActivity$MessageReceiver@412bf4a0 that was originally registered here. Are you missing a call to unregisterReceiver()?
06-29 18:37:20.527: E/ActivityThread(1344): android.app.IntentReceiverLeaked: Activity com.imrankhanandroid.Androidtest.AndroidTestActivity has leaked IntentReceiver com.imrankhanandroid.Androidtest.AndroidTestActivity$MessageReceiver@412bf4a0 that was originally registered here. Are you missing a call to unregisterReceiver()?
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:763)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:567)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1043)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1030)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1024)
06-29 18:37:20.527: E/ActivityThread(1344): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:341)
06-29 18:37:20.527: E/ActivityThread(1344): at com.imrankhanandroid.Androidtest.AndroidTestActivity.onCreate(AndroidTestActivity.java:81)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.Activity.performCreate(Activity.java:4465)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-29 18:37:20.527: E/ActivityThread(1344): at android.os.Handler.dispatchMessage(Handler.java:99)
06-29 18:37:20.527: E/ActivityThread(1344): at android.os.Looper.loop(Looper.java:137)
06-29 18:37:20.527: E/ActivityThread(1344): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-29 18:37:20.527: E/ActivityThread(1344): at java.lang.reflect.Method.invokeNative(Native Method)
06-29 18:37:20.527: E/ActivityThread(1344): at java.lang.reflect.Method.invoke(Method.java:511)
06-29 18:37:20.527: E/ActivityThread(1344): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-29 18:37:20.527: E/ActivityThread(1344): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-29 18:37:20.527: E/ActivityThread(1344): at dalvik.system.NativeStart.main(Native Method)
06-29 18:37:20.557: E/ActivityThread(1344): Activity com.imrankhanandroid.Androidtest.AndroidTestActivity has leaked IntentReceiver com.imrankhanandroid.Androidtest.AndroidTestActivity$MessageReceiver@412d2f88 that was originally registered here. Are you missing a call to unregisterReceiver()?
06-29 18:37:20.557: E/ActivityThread(1344): android.app.IntentReceiverLeaked: Activity com.imrankhanandroid.Androidtest.AndroidTestActivity has leaked IntentReceiver com.imrankhanandroid.Androidtest.AndroidTestActivity$MessageReceiver@412d2f88 that was originally registered here. Are you missing a call to unregisterReceiver()?
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:763)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:567)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1043)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1030)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1024)
06-29 18:37:20.557: E/ActivityThread(1344): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:341)
06-29 18:37:20.557: E/ActivityThread(1344): at com.imrankhanandroid.Androidtest.AndroidTestActivity.onCreate(AndroidTestActivity.java:85)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.Activity.performCreate(Activity.java:4465)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-29 18:37:20.557: E/ActivityThread(1344): at android.os.Handler.dispatchMessage(Handler.java:99)
06-29 18:37:20.557: E/ActivityThread(1344): at android.os.Looper.loop(Looper.java:137)
06-29 18:37:20.557: E/ActivityThread(1344): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-29 18:37:20.557: E/ActivityThread(1344): at java.lang.reflect.Method.invokeNative(Native Method)
06-29 18:37:20.557: E/ActivityThread(1344): at java.lang.reflect.Method.invoke(Method.java:511)
06-29 18:37:20.557: E/ActivityThread(1344): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-29 18:37:20.557: E/ActivityThread(1344): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-29 18:37:20.557: E/ActivityThread(1344): at dalvik.system.NativeStart.main(Native Method)

最佳答案

作为您的 logcat 行:

at com.imrankhanandroid.Androidtest.Intentservice.onHandleIntent(Intentservice.java:157)
06-29 18:37:18.796: E/AndroidRuntime(1344): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)

意味着问题出在IntentService的onHandleIntent中:

Override
protected void onHandleIntent(Intent intent)
{
String strxmin,xmax,ymin,ymax;
String str=intent.getExtras().getString("strtest");
Log.d("onHandleIntent", "onHandleIntent onHandleIntent= "+str);
String[] arrtelog=str.split("/");
if(arrtelog.length >=3)
{
strxmin=arrtelog[0];
xmax=arrtelog[1];
ymin=arrtelog[2];
ymax=arrtelog[3];
}
else{
//your code here if array length is 0
}

关于android - 应用程序崩溃 - Web 服务没有返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11266775/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com