2012-01-12 9 views
0

私はアンドロイドアプリケーションでバックグラウンドサービスの緯度と経度の値にアクセスできますが、バックグラウンドサービスが動作している緯度と経度を呼び出すことなく、緯度と経度の関数を呼び出すときはいつでも、力が近づいています。アンドロイドのバックグラウンドサービスでonStrartの別の関数を呼び出すことができません

public class MyService extends Service { 
private TextView latituteField; 
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters 
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 60000; 
SoapObject request=null; 

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
private static final String HostUrl ="xxxxx"; 
//private static final String HostUrl =" yyyy; 
private static final String NAMESPACE = "http://tempuri.org/"; 
private static final String methodname="were"; 

private HttpTransportSE httpTransport = new HttpTransportSE(HostUrl); 
    private static TextView longitudeField; 
    private LocationManager locationManager; 
    private String provider; 
     String tag="TestService"; 
    private Intent MyServiceIntent; 
    @Override 
    public void onCreate() { 
    super.onCreate(); 
    Toast.makeText(this, "Service created...", Toast.LENGTH_LONG).show();  
    Log.i(tag, "Service created..."); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) {  
    super.onStart(intent, startId); 
    Toast.makeText(this, "Service started...", Toast.LENGTH_LONG).show(); 
    result();//my problem is here 
    } 
    @Override 
    public void onDestroy() { 
    super.onDestroy(); 
    Toast.makeText(this, "Service destroyed...", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
    return null; 
    } 
    private class loca extends Activity implements LocationListener { 


@Override protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView (R.layout.main); 
     latituteField = (TextView) findViewById(R.id.TextView02); 
     longitudeField = (TextView) findViewById(R.id.TextView04); 

     // Get the location manager 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     // Define the criteria how to select the locatioin provider -> use 
     // default 
     Criteria criteria = new Criteria(); 

    provider = locationManager.getBestProvider(criteria, false); 
    Location location = locationManager.getLastKnownLocation(provider); 

    // Initialize the location fields 
    if (location != null) { 
     System.out.println("Provider " + provider + " has been selected."); 
     float lat = (float) (location.getLatitude()); 
     float lng = (float) (location.getLongitude()); 
     latituteField.setText(String.valueOf(lat)); 
     longitudeField.setText(String.valueOf(lng)); 

    } else { 
     latituteField.setText("provider not available"); 
     longitudeField.setText("provider not available"); 
    } 
    } 
    @Override 
    public void onLocationChanged(Location location) { 
    result(); 
    } 


@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 
    } 
private void result() { 
    SoapPrimitive response=null; 
    request = new SoapObject(NAMESPACE,methodname); 
    envelope.dotNet = true; 
    request.addProperty("Longitude",longitudeField.getText().toString()); 
    request.addProperty("Latitude",latituteField.getText().toString()); 
    envelope.setOutputSoapObject(request); 
    String result = null; 
    try 
    {   
     httpTransport.call(NAMESPACE+"IService/"+methodname, envelope); 
     response = (SoapPrimitive)envelope.getResponse(); 
     result=response.toString(); 
    } 
    catch(Exception e) 
    { 
     Toast.makeText(this, "Exception"+e.toString(), Toast.LENGTH_LONG).show(); 
     Log.e("Upload Picture Error:",e.getMessage()); 
    } 

     } 
    } 

logcatエラー

01-12 12:52:49.769: ERROR/AndroidRuntime(1647): FATAL EXCEPTION: main 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647): java.lang.RuntimeException: Unable to start service [email protected] with Intent { cmp=com.javaorigin.android.sample.service/.MyService }: java.lang.NullPointerException 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3063) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at android.app.ActivityThread.access$3600(ActivityThread.java:125) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at android.os.Looper.loop(Looper.java:123) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at java.lang.reflect.Method.invokeNative(Native Method) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at java.lang.reflect.Method.invoke(Method.java:521) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at dalvik.system.NativeStart.main(Native Method) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647): Caused by: java.lang.NullPointerException 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at com.javaorigin.android.sample.service.MyService.result(MyService.java:141) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at com.javaorigin.android.sample.service.MyService.onStart(MyService.java:59) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at android.app.Service.onStartCommand(Service.java:420) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053) 
    01-12 12:52:49.769: ERROR/AndroidRuntime(1647):  ... 10 more 
+0

uuuh force close? Locatのエラーはどこですか? –

+0

私は私のlogcatエラーを追加しました – Mercy

答えて

1

あなたはサービスから変数longitudeFieldとlatituteFieldにアクセスしようとしています。これらはアクティビティoncreateで初期化され、アクティビティを開始しない限り呼び出されません。
さらに、アクティビティをプライベートとして定義しました。だからあなたはマニフェストの内側にこれを追加することはできません。だからあなたはAFAIK活動を開始することはできません。

:デザインを変更する必要があります。サービスクラス外のアクティビティを移動し、インテントを使用してアクティビティに情報を渡す

+0

私はそれもまた強制的に閉じることを意味を渡す場合 – Mercy

+0

上記のデザインは決して動作しません。デザインを変更して、問題の別の質問を投稿してください。 – nandeesh

+0

InformationIntent =新しいインテント(this、loca.class); startActivity(InformationIntent);このようにしようとしています – Mercy

関連する問題