Saya mengalami kesulitan membongkar tugas dari metode Kegiatan OnCreate utama ke kelas lain untuk melakukan tugas berat.
Ketika saya mencoba memanggil getSystemService dari kelas non-Activity, sebuah pengecualian dilemparkan.
Setiap bantuan akan sangat dihargai :)
lmt.java:
package com.atClass.lmt;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.location.Location;
public class lmt extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
fyl lfyl = new fyl();
Location location = lfyl.getLocation();
String latLongString = lfyl.updateWithNewLocation(location);
TextView myLocationText = (TextView)findViewById(R.id.myLocationText);
myLocationText.setText("Your current position is:\n" + latLongString);
}
}
fyl.java
package com.atClass.lmt;
import android.app.Activity;
import android.os.Bundle;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
import android.content.Context;
public class fyl {
public Location getLocation(){
LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);
String provider = LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
return location;
}
public String updateWithNewLocation(Location location) {
String latLongString;
if (location != null){
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
}else{
latLongString = "No Location";
}
return latLongString;
}
}
Jawaban:
Anda perlu meneruskan konteks Anda ke kelas fyl Anda ..
Salah satu solusinya adalah membuat konstruktor seperti ini untuk
fyl
kelas Anda :Jadi di kelas aktivitas Anda buat objek fyl dalam
onCreate
fungsi seperti ini:sumber
lmt
kelas tidak akan dieksekusi makafly
tidak akan memiliki konteksgetSysytemService()
hanya menerimaString
sebagai parameter. Karenanya Anda tidak dapat memberikan konteks padanya. Bagaimana saya mengatasi ini? @HuntBluetoothManager
,ActivityManager
dll.) Juga dibangun dengan cara itu (tidak harus menyampaikanActivity
konteks kepada konstruktor mereka) dan inilah mengapa mereka dapat mengakses komponen dalam cakupan aplikasi.Anda bisa melakukannya untuk ini:
sumber
ArrayAdapter
.Salah satu cara saya mendapatkan ini adalah dengan membuat kelas statis untuk instance. Saya banyak menggunakannya di AS3. Saya telah bekerja sangat baik untuk saya dalam pengembangan android juga.
Config.java
MyApp.java
Anda kemudian dapat mengakses konteksnya atau dengan menggunakan
Config.context
sumber
private static MyApp _context;
public static MyApp getContext() { return _context; }
... di onCreate:_context = this;
di OnStop:_context = null;
... Penggunaan:MyApp.getContext()
.Saya tidak tahu apakah ini akan membantu, tetapi saya melakukan ini:
sumber
Untuk beberapa kelas non-aktivitas, seperti Worker , Anda sudah diberikan objek Konteks di konstruktor publik.
Anda bisa menggunakan itu, misalnya, menyimpannya ke variabel Konteks pribadi di kelas (katakanlah,
mContext
), dan kemudian, misalnyasumber