2012-06-29 2 views
0

그래서 기기의 Google지도에 액세스하는 앱을 개발했습니다. 그 후 그것은 장치에서 보이는 화면의 코너 cordinates (상단 왼쪽 및 하단 오른쪽)를 읽고 변수 xmin xmax ymin 및 ymax에 값을 저장합니다. 이제이 값은앱 크래시 - 웹 서비스에서 돌아 오지 않음

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

그 지역에서 플롯 할 필요가 주석의 좌표,를 얻기 위해 코드에서 언급 한 바와 같이 다른 매개 변수와 함께 웹 서비스에 전달됩니다. 하드와 같은 값을 코딩 된 값에 대한 지금

xmin= -100 
    ymin= -99 
    xmax= 40 
    ymax= 41 
프로그램이 잘 작동

, 출력은 구문 분석 및 주석이 그려하지만, XML입니다 난에 보이는대로 코너 좌표,를 사용하려고하면 지도, 값은,

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.i[email protected]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.i[email protected]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.i[email protected]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.i[email protected]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) 
+2

당신이 로그 캣 – rajpara

+0

게시 게시하시기 바랍니다 수 있습니다! 도움이된다면 정말로 감사 할 것입니다 –

+0

Intentservice.java:157의 코드는 무엇입니까 ?? 배열에 항목이 추가되지 않았으므로 0 인덱스가있는 첫 번째 항목 – rajpara

답변

2

:

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 
    } 
+0

맞습니다. 실수로 잘못된 코드를 선택하여 수정했습니다. 내 게시물에서 동일한 개념입니다. 이것은 OP 질문에 즉각적인 수정이되어야합니다. –

+0

@Atlos : 고마워, 내 대답에 동의하면 upvote하고 @ Tanzeel 그것을 시도해보십시오 나는 이것이 yor 문제를 해결할 것이라고 확신합니다. –

2

당신은 당신이 바로 그 일을하는 IndexOutOfBounds 예외를 받고있는 경우. ArrayList 크기가 0 인 경우 목록에 0 번째 항목이 없기 때문에 <yourlist>.get(0)을 호출하면 충돌이 발생합니다.

if(arrlat_long != null && arrlat_long.isEmpty() == false) 
    Toast.makeText(context, arrlat_long.get(0),Toast.LENGTH_SHORT).show(); 

또는 당신이 기대하는 것 때문에 당신이 try/catch를 사용하고 IndexOutOfBounds 예외를 잡아 그것을 무시하도록 선택할 수 있습니다 :이 그냥 널 (null)이 있는지 여부를 확인하기 위해 ArrayList를 확인하거나처럼 비어 해결하려면. 당신의 로그 캣 라인으로

+0

+1 당신도 맞습니다 @Atlos –

관련 문제