나는 기본적으로 맵에 포인트를 플롯하는 안드로이드 앱을 가지고 있습니다. 이지도는 완전히 다른 클래스에서 결정됩니다. 원래이 클래스를 자체 프로그램으로 작성했습니다 (CSV 파일을 읽고 포인트를 선택하고 배열에서 경도와 위도를 다시 제공).Android 액티비티로 활동이없는 코드 실행하기
그래서 내가 한 것은이 클래스를 Android 앱에 추가 한 것입니다. 어떤 시점에서 배열을 생성하고 반환하고,이 새로운 배열을지도의 점을 그리기 위해 사용하는 클래스의 메서드를 호출하는 응용 프로그램을 원합니다. 배열을 잡고 각 위도와 경도를 찾아내는 것만 큼 멀리 할 수 있습니다.
하지만, 내 안드로이드 응용 프로그램의 메인 클래스에서, 내가 언급 할 때 :
String[][] bump = ReadCsv.getArray(fileToUse);
, 내 프로그램이 강제 종료됩니다. (ReadCsv는 내가 프로그램에 넣은 클래스의 이름입니다 - 클래스의 유일한 메소드에서 getArray를 가져오고 배열 [] []을 반환합니다).
누구나 내 문제가 무엇인지 알 것 같니? 대체 솔루션이 가능할 수 있습니까?
로그 캣은 : 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12,214) FATAL EXCEPTION : 메인 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12,214)가있는 java.lang. RuntimeException의 : 활동 ComponentInfo 시작할 수 없습니다 {net.learn2develop.GoogleMaps을/net.learn2develop.GoogleMaps.MapsActivity} : java.lang.NullPointerException이 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12214) : android.app에서. ActivityThread.performLaunchActivity (ActivityThread.java:2663) 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12214) : android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2679) 07-27 15:19 : 25.105 : ERROR/AndroidRuntime (12214) : android.app.ActivityThread.access $ 2300 (ActivityThread.java:125) 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12,214) android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2033)에서 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12,214)에 android.os .Handler.dispatchMessage (Handler.java:99) 07-27 15 : 19 : ERROR/AndroidRuntime (12214) : android.os.Looper.loop (Looper.java:123)에서 07-27 25.105 15시 19분 : 25.105 : ERROR/AndroidRuntime (12214) : android.app.ActivityThread.main (ActivityThread.java:4627) 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12214) : java.lang.reflect.Method에서 .invokeNative (원시 메소드) 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12,214) java.lang.reflect.Method.invoke (Method.java:521)에서 07-27 15 : 19 : 25.105 : 오류/AndroidRuntime (12214) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:858) 07-27 15:19 : 25.105 : ERROR/AndroidRuntime (12,214) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)에서 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12,214)에 dalvik.system. NativeStart.main (네이티브 메소드) 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12214) : 원인 : java.lang.NullPointerException 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12214) : at net.learn2develop.GoogleMaps.MapsActivity.onCreate (MapsActivity.java:86) 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12214) : android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 07 -27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12,214) android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2627)에서 07-27 15 : 19 : 25.105 : ERROR/AndroidRuntime (12,214) ...
더 (11) 그리고 내 코드는 다음과 같습니다
package net.learn2develop.GoogleMaps;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.List;
import java.util.StringTokenizer;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.MapView.LayoutParams;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
public class MapsActivity extends MapActivity
{
MapView mapView;
MapController mc;
GeoPoint p;
GeoPoint p2;
GeoPoint p99;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapView);
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
@SuppressWarnings("deprecation")
View zoomView = mapView.getZoomControls();
mapView.setSatellite(true);
zoomLayout.addView(zoomView,
new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mapView.displayZoomControls(true);
mc = mapView.getController();
String coordinates[] = {"42.30936432", "-71.12162781"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
mc.animateTo(p);
mc.setZoom(8);
//---Add a location marker---
MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
//listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
// -- my own point ---
String coordinates2[] = {"42.20", "-71.20"};
double lat2 = Double.parseDouble(coordinates2[0]);
double lng2 = Double.parseDouble(coordinates2[1]);
p2 = new GeoPoint(
(int) (lat2 * 1E6),
(int) (lng2 * 1E6));
MapOverlay mapOverlay2 = new MapOverlay();
List<Overlay> listOfOverlays2 = mapView.getOverlays();
listOfOverlays2.add(mapOverlay2);
// Add points from ReadCsv.java
File fileToUse = new File("/Users/csrobot/Desktop/Training4.csv");
String[][] bump = ReadCsv.getArray(fileToUse);
for(int i = 0; i < bump.length; i++) {
String coordinates99[] = {bump[i][0], bump[i][1]};
double lat99 = Double.parseDouble(coordinates99[0]);
double lng99 = Double.parseDouble(coordinates99[1]);
p99 = new GeoPoint(
(int) (lat99 * 1E6),
(int) (lng99 * 1E6));
MapOverlay mapOverlay99 = new MapOverlay();
List<Overlay> listOfOverlays99 = mapView.getOverlays();
listOfOverlays99.add(mapOverlay99);
}
mapView.invalidate();
}
class MapOverlay extends com.google.android.maps.Overlay
{
@Override
public boolean draw(Canvas canvas, MapView mapView,
boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
//---translate the GeoPoint to screen pixels---
Point screenPts = new Point();
mapView.getProjection().toPixels(p, screenPts);
//---add the marker---
Bitmap bmp = BitmapFactory.decodeResource(
getResources(), R.drawable.redpin);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-44, null);
// --make my own point---
Point screenPts2 = new Point();
mapView.getProjection().toPixels(p2, screenPts2);
Bitmap bmp2 = BitmapFactory.decodeResource(
getResources(), R.drawable.redpin);
canvas.drawBitmap(bmp2, screenPts2.x, screenPts2.y-44, null);
return true;
}
}
static class ReadCsv {
public static String[][] getArray(File file) {
try {
//
// Code That I know Works is Here
//
return arrayOfBumps;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch(Exception e) {
// System.out.println("The following error occurred "+e);
}
return null;
}
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
편집 : 라비 밧이
private class MapPoint extends AsyncTask <String[][], String, String> {
@Override
protected String doInBackground(String[][]... <<What goes here...? >>) {
String << what am i making to return? >> = null;
try {
InputStream is = getAssets().open("Training4.csv");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
bump = getArray(reader);
if(bump == null){
setContentView(R.layout.deleteme);
} else {
for(int i = 0; i < bump.length; i++) {
String coordinates99[] = {bump[i][0], bump[i][1]};
double lat99 = Double.parseDouble(coordinates99[0]);
double lng99 = Double.parseDouble(coordinates99[1]);
p99 = new GeoPoint(
(int) (lat99 * 1E6),
(int) (lng99 * 1E6));
MapOverlay mapOverlay99 = new MapOverlay();
List<Overlay> listOfOverlays99 = mapView.getOverlays();
listOfOverlays99.add(mapOverlay99);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return << do I really need to return something? if so, what? >>;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
mapView.refreshDrawableState();
}
}
응용 프로그램이 "강제 종료"될 때마다 일반적으로 logcat에서 사용할 수있는 오류 정보가 있습니다. 게시물에 해당 정보를 포함 시키십시오. 그렇지 않으면 문제가 무엇인지 추측 할 수 있습니다. –