2011-01-15 56 views
3

私はエミュレータで再作成できないいくつかの問題がありますが、私は解決方法を持っていないアンドロイドマーケットでエラーレポートを取得し続けています。時には、これは場所を取得するときにnullPointerExceptionが発生する

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) 

そして、時には、このレポートをreposrts

ワリーGREATFULこと

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) 
ここ

)自分のコード

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() + "");  
    } 
} 

}

+0

あなたのせいではないような気分です。特定のデバイス、特定のメーカー、特定のAndroidのバージョンなど、例外がどこから来ているかのパターンはありますか? – CommonsWare

+0

いいえ携帯電話やAndroid搭載端末がレポートに表示されていないことはわかりません。アンドロイド2.2で自分の携帯電話(HTC Desire)で私は時々気づいたアプリが時々、あまりに頻繁に停止しないで、凍結やクラッシュではなく、ちょうどdosnt次のステップに行く。 – Jerry

答えて

1

方法Settings.Secure.getString(要求された名前がデータベースにない場合はnullを返すことができます。私はなぜ、Settings.Secure.LOCATION_PROVIDERS_ALLOWEDが見つからないのか分かりません。ただし、コードが空の文字列でないことを確認する前に、プロバイダがnullでないことを(getLocation()で)チェックしません。私はあなたの2番目の例外の原因だと思う。

あなたのコードで何かをサポートしていないOSリリースでアプリケーションを実行しようとすると、フレームワークの深刻なランダムエラーが発生する可能性もあります。 targetSdkVersionだけでなく、マニフェストで設定したminSdkVersionに対してコードがコンパイルされていることを確認してください。

+0

OK、病気のプロバイダーのdosntがnullで始まるようにしてください。病気の報告が戻ってきます。 – Jerry

+0

@Ted Hopp - これはトリックを行うことができると思いますか? if(provider == null)provider = ""; – Jerry

+0

"if(!(provider == null || provider.equals(" "))){...}"を試してください。それはトリックを行う必要があります。 –

1

この問題に関する注記。これがあなたの問題かどうかは分かりませんが、アプリケーション間でいくつかのファイルを共有しようとしていて、AndroidManifest.xmlファイルのandroid:sharedUserId属性を変更しようとしました。私がそれをしたら、あなたが報告したのとまったく同じエラーが出て、私のアプリは正しく起動しませんでした。(AdRequestの失敗のためです。)マニフェストからsharedUserId属性を削除した後でも、私はそれが環境設定データベースのものだとは思っていましたが、引き続きエラーが発生しました。

アプリケーションの配備後にアプリケーションのsharedUserId属性を変更しないでください。また、すべての機能を再開するためにアンインストール/再インストールが必要になります。

関連する問題