Ich habe einige Probleme, die ich nicht im Emulator neu erstellen kann, aber ich bekomme Fehlerberichte im Android Market, dass ich keine Ahnung habe, wie zu lösen ... jemand anderes, der es ID sehen könnte sein wery greatfuljava.lang.NullPointerException beim Abrufen der Position
manchmal wird diese reposrts
java.lang.NullPointerException
at android.webkit.WebViewDatabase.getCacheTotalSize(WebViewDatabase.java:734)
at android.webkit.CacheManager.trimCacheIfNeeded(CacheManager.java:548)
at android.webkit.WebViewWorker.handleMessage(WebViewWorker.java:190)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.os.HandlerThread.run(HandlerThread.java:60)
Und manchmal diesen Bericht
java.lang.RuntimeException: Unable to start activity ComponentInfo{polis.koll/polis.koll.WebPageLoader}: java.lang.IllegalArgumentException: provider==null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2737)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2753)
at android.app.ActivityThread.access$2500(ActivityThread.java:129)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2107)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4701)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: provider==null
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:625)
at polis.koll.WebPageLoader.getLocation(WebPageLoader.java:54)
at polis.koll.WebPageLoader.onCreate(WebPageLoader.java:70)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2701)
Hier
ist mein Code
public class WebPageLoader extends Activity implements LocationListener{
public static String Android_ID = null;
final Activity activity = this;
private Location mostRecentLocation;
private void CheckEnableGPS(){
String provider = Settings.Secure.getString(getContentResolver(),
Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(!provider.equals("")){
//GPS Enabled
getLocation();
}else{
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
}
private void getLocation() {
String provider = Settings.Secure.getString(getContentResolver(),
Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(!provider.equals("")){
LocationManager locationManager =
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String bestprovider = locationManager.getBestProvider(criteria,true);
locationManager.requestLocationUpdates(bestprovider, 1, 500, this);
mostRecentLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}else{
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
}
@Override
public void onCreate(Bundle savedInstanceState)
{
//AdManager.setTestDevices(new String[] { AdManager.TEST_EMULATOR });
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);
getLocation();
Android_ID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
WebView webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
/** Allows JavaScript calls to access application resources **/
webView.addJavascriptInterface(new JavaScriptInterface(), "android16");
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress)
{
activity.setTitle("Letar poliskontroller");
activity.setProgress(progress * 100);
if(progress == 100)
activity.setTitle(R.string.app_name);
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
// Handle the error
}
// Testade att ta bort denna override för att få market länkar att fungera
// @Override
// public boolean shouldOverrideUrlLoading(WebView view, String url)
// {
// view.loadUrl(url);
// return true;
// }
});
if (Locale.getDefault().getLanguage().equals("sv")){
//webView.loadUrl("file:///android_asset/android.html");
webView.loadUrl("file:///android_asset/findgps_sv.html");
}else{
//webView.loadUrl("http://m.bryggplatsen.se/android/polis/index.php");
//webView.loadUrl("file:///android_asset/android_en.html");
webView.loadUrl("file:///android_asset/findgps_en.html");
}
}
/** Sets up the interface for getting access to Latitude and Longitude data from device
**/
private class JavaScriptInterface {
public double getLatitude(){
return mostRecentLocation != null ? mostRecentLocation.getLatitude() : Double.NaN;
}
public double getLongitude(){
return mostRecentLocation != null ? mostRecentLocation.getLongitude() : Double.NaN;
}
public String getAndroid_ID(){
return Android_ID;
}
public void sharethisapp(){
startActivity(Intent.createChooser(sharespotIntent(), "Share this warning"));
}
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
getLocation();
//CheckEnableGPS();
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
getLocation();
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
getLocation();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
getLocation();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuItem item = menu.add("Shut down");
item.setIcon(R.drawable.exit);
item = menu.add("Share");
item.setIcon(R.drawable.m_share);
item = menu.add("Fix GPS");
item.setIcon(R.drawable.globe);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getTitle() == "Shut down") {
System.exit(0);
finish();
}
if (item.getTitle() == "Fix GPS") {
getLocation();
}
if (item.getTitle() == "Share") {
if (Locale.getDefault().getLanguage().equals("sv")){
startActivity(Intent.createChooser(shareIntent(), "Dela denna app"));
}else{
startActivity(Intent.createChooser(shareIntent(), "Share this app"));
}
}
return true;
}
private Intent shareIntent() {
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
if (Locale.getDefault().getLanguage().equals("sv")){
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Testa denna android app...");
return shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "index.php");
}else{
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Try this cool android app...");
return shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "index_en.php");
}
}
private Intent sharespotIntent() {
Intent sharespotIntent = new Intent(android.content.Intent.ACTION_SEND);
sharespotIntent.setType("text/plain");
if (Locale.getDefault().getLanguage().equals("sv")){
sharespotIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, " la just upp en ny varning i appen Polisradar");
return sharespotIntent.putExtra(android.content.Intent.EXTRA_TEXT, "warn.php?lat=" + mostRecentLocation.getLatitude() + "&lng=" + mostRecentLocation.getLongitude() + "");
}else{
sharespotIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, " just added a new warning in the app Policeradar");
return sharespotIntent.putExtra(android.content.Intent.EXTRA_TEXT, "warn_en.php?lat=" + mostRecentLocation.getLatitude() + "&lng=" + mostRecentLocation.getLongitude() + "");
}
}
}
Das fühlt sich an wie etwas, das nicht deine Schuld ist. Gibt es Muster hinsichtlich der Herkunft der Ausnahmen: bestimmte Geräte, bestimmte Hersteller, bestimmte Android-Versionen usw.? – CommonsWare
Nein, ich kann nicht sehen, welche Telefone oder Android sie in den Berichten haben. Auf meinem eigenen Handy (HTC Desire) mit Android 2.2 habe ich manchmal bemerkt, dass die App manchmal aber nicht zu oft aufhört, nicht einfriert oder abstürzt, sondern einfach nicht zum nächsten Schritt geht. – Jerry