2012-06-27 3 views
-1

Я новичок в андроида программирования и я написал этот код, который разбирает THT видимую экрана, чтобы получить верхний левый и нижний правый угол cordinates, а затем передает значения в WebService,App сбоями Проходя значение веб-службы

http://hiscentral.cuahsi.org/webservices/hiscentral.asmx?op=GetSeriesCatalogForBox2 

теперь, когда я передавал значения по умолчанию xmin xmax ymin и ymax, тогда приложение работает нормально, но затем, когда я использую функцию MapView, чтобы получить угловое сердце, а затем передать их веб-службе, приложение перестанет работать.

я был бы очень благодарен, если вы могли бы мне помочь с этим, спасибо заранее

AndroidTest.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<Double> pass= new ArrayList<Double>(); 
ArrayList<Double> d = new ArrayList<Double>(); 
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; 
double degree; 
double minutes; 
double seconds; 
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));*/ 

    d.add(topLat); 
    d.add(topLon); 
    d.add(bottomLat); 
    d.add(bottomLon); 

    for (int i=0; i<4 ; i++) 
    { 
     double value = d.get(i);  
     if (value <0) 
     { 
      value=value*-1; 
      int y = (int) value; 
      double rest= value - y; 
      String min_sec = Double.toString(rest); 
      String min = min_sec.substring(2,4); /* minutes */ 
      String sec = min_sec.substring(4,6); /* seconds */ 
      minutes = (Double.valueOf(min))/60; /* minutes DD */ 
      seconds = Double.valueOf(sec)/3600; 
      double value1= y + minutes + seconds; 
      value1=value1*-1; 
      pass.add(value1); 
     } 
     else 
     { 
       int y1 = (int) value; 
       double rest1= value - y1; 
       String min_sec1 = Double.toString(rest1); 
       String min1 = min_sec1.substring(2,4); /* minutes */ 
       String sec1 = min_sec1.substring(4,6); /* seconds */ 
       minutes = (Double.valueOf(min1))/60; /* minutes DD */ 
       seconds = Double.valueOf(sec1)/3600; 
       double value1= y1 + minutes + seconds; 
       pass.add(value1); 
     } 
    } 


    double a= pass.get(0); 
    double b= pass.get(1); 
    double c= pass.get(2); 
    double d= pass.get(3); 


    strtest=Double.toString(a)+"/"+Double.toString(b)+"/"+Double.toString(c)+"/"+Double.toString(d); 
    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("/"); 
    if(arrtelog.length >=3) 
     { 
      strxmin=arrtelog[0]; 
      xmax=arrtelog[1]; 
      ymin=arrtelog[2]; 
      ymax=arrtelog[3]; 



    // 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",ymax)); 
    nameValuePairs.add(new BasicNameValuePair("xmax", "-99")); 
    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(); 
    } 
    catch(IndexOutOfBoundsException e) 
    { 

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

}

Это LogCat,

07-02 20:32:59.362: E/AndroidRuntime(2372): FATAL EXCEPTION: IntentService[Intentservice] 
07-02 20:32:59.362: E/AndroidRuntime(2372): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
07-02 20:32:59.362: E/AndroidRuntime(2372):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
07-02 20:32:59.362: E/AndroidRuntime(2372):  at java.util.ArrayList.get(ArrayList.java:304) 
07-02 20:32:59.362: E/AndroidRuntime(2372):  at com.imrankhanandroid.Androidtest.Intentservice.onHandleIntent(Intentservice.java:159) 
07-02 20:32:59.362: E/AndroidRuntime(2372):  at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
07-02 20:32:59.362: E/AndroidRuntime(2372):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-02 20:32:59.362: E/AndroidRuntime(2372):  at android.os.Looper.loop(Looper.java:137) 
07-02 20:32:59.362: E/AndroidRuntime(2372):  at android.os.HandlerThread.run(HandlerThread.java:60) 
07-02 20:32:59.542: D/dalvikvm(2372): GC_CONCURRENT freed 152K, 3% free 10152K/10375K, paused 5ms+23ms 
07-02 20:33:00.702: E/ActivityThread(2372): Activity com.imrankhanandroid.Androidtest.AndroidTestActivity has leaked IntentReceiver com.i[email protected]412a0378 that was originally registered here. Are you missing a call to unregisterReceiver()? 
07-02 20:33:00.702: E/ActivityThread(2372): android.app.IntentReceiverLeaked: Activity com.imrankhanandroid.Androidtest.AndroidTestActivity has leaked IntentReceiver com.i[email protected]412a0378 that was originally registered here. Are you missing a call to unregisterReceiver()? 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:763) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:567) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1043) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.ContextImpl.registerReceiver(ContextImpl.java:1030) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.ContextImpl.registerReceiver(ContextImpl.java:1024) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:341) 
07-02 20:33:00.702: E/ActivityThread(2372):  at com.imrankhanandroid.Androidtest.AndroidTestActivity.onCreate(AndroidTestActivity.java:130) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.Activity.performCreate(Activity.java:4465) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.os.Looper.loop(Looper.java:137) 
07-02 20:33:00.702: E/ActivityThread(2372):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
07-02 20:33:00.702: E/ActivityThread(2372):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-02 20:33:00.702: E/ActivityThread(2372):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-02 20:33:00.702: E/ActivityThread(2372):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
07-02 20:33:00.702: E/ActivityThread(2372):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
07-02 20:33:00.702: E/ActivityThread(2372):  at dalvik.system.NativeStart.main(Native Method) 
07-02 20:33:00.852: E/ActivityThread(2372): Activity com.imrankhanandroid.Androidtest.AndroidTestActivity has leaked IntentReceiver com.i[email protected]412a62d8 that was originally registered here. Are you missing a call to unregisterReceiver()? 
07-02 20:33:00.852: E/ActivityThread(2372): android.app.IntentReceiverLeaked: Activity com.imrankhanandroid.Androidtest.AndroidTestActivity has leaked IntentReceiver com.i[email protected]412a62d8 that was originally registered here. Are you missing a call to unregisterReceiver()? 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:763) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:567) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1043) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.ContextImpl.registerReceiver(ContextImpl.java:1030) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.ContextImpl.registerReceiver(ContextImpl.java:1024) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:341) 
07-02 20:33:00.852: E/ActivityThread(2372):  at com.imrankhanandroid.Androidtest.AndroidTestActivity.onCreate(AndroidTestActivity.java:126) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.Activity.performCreate(Activity.java:4465) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.os.Looper.loop(Looper.java:137) 
07-02 20:33:00.852: E/ActivityThread(2372):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
07-02 20:33:00.852: E/ActivityThread(2372):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-02 20:33:00.852: E/ActivityThread(2372):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-02 20:33:00.852: E/ActivityThread(2372):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
07-02 20:33:00.852: E/ActivityThread(2372):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
07-02 20:33:00.852: E/ActivityThread(2372):  at dalvik.system.NativeStart.main(Native Method) 
+0

Просьба вывести логарифмический вывод из аварии. –

+0

Это очень неясно. Пожалуйста, укажите, где именно он терпит неудачу, или еще лучше, дайте нам стек ошибок LogCat. –

+0

Где он падает? Какое исключение или отладка вы видите? Вы вообще его сузили? Попытайтесь получить минимальный репродуктор. С какими точными данными он сбой? – SirPentor

ответ

1

использование

String k = topLat.toString(); 

вместо

String k = String.valueOf(topLat); 
0
int eventType = myxml.getEventType(); 

попробовать:

int eventType = Integer.parseInt(myxml.getEventType()); 
3

Вы проверить размер вашего массива здесь:

if(arrtelog.length >=3) 

после (едва видимой) закрывающей скобки для этого, если вы звоните своему Log.d заявление.

Проблема заключается в том, что вы заполняете только ArrayList arrlat_long, если ваша переменная arrtelog равна> = 3, поэтому в случае, когда она не длиннее, вы не заполняете ArrayList. И get(0) в пустом списке невозможен и приводит к ошибке, имеющейся в вашем LogCat.

Смежные вопросы