2011-03-18 117 views
0

我有两个应用程序:第一个是远程服务。它的清单是:NPE在某些设备上的远程服务(特定于市场?)的应用程序

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.mecom.framework" 
     android:versionCode="1" 
     android:versionName="1.0"> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

      <activity android:name="SettingsActiviry" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <service android:name=".ParserService" 
        android:process=":remote" 
        android:enabled="true" 
        android:exported="true"> 
      <intent-filter> 
       <action android:name="com.mecom.framework.parser.interfaces.Parser" /> 
       <action android:name="com.mecom.framework.PARSE" /> 
       <category android:name="com.mecom.framework.PARSE" /> 
      </intent-filter> 
     </service> 

    </application> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

</manifest> 

第二个绑定到此服务并执行一个方法。这是明显的:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.mecom.berlingske" 
     android:versionCode="1" 
     android:versionName="1.0"> 

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Light"> 
     <activity android:name=".MainActivity" 
        android:label="@string/app_name" 
        android:theme="@style/BerlingskeMainTheme" 
        android:configChanges="keyboard|keyboardHidden|orientation"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity android:name=".ArticleActivity" 
        android:label="@string/article" 
        android:theme="@style/BerlingskeMainTheme" 
        android:configChanges="keyboard|keyboardHidden|orientation"/> 
    </application> 

</manifest> 

现在是什么奇怪的是这些应用程序完全正常工作在模拟器上Android 2.1系统,并在我的根的HTC Hero与氰7(安卓2.3.2)。

它抛出上的HTC Desire HD和Nexus S中的以下异常(两者均未扎根):

W/dalvikvm(2990): threadid=8: thread exiting with uncaught exception (group=0x40025a70) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990): FATAL EXCEPTION: AsyncTask #1 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990): java.lang.RuntimeException: An error occured while executing doInBackground() 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at java.lang.Thread.run(Thread.java:1102) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990): Caused by: java.lang.NullPointerException 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at android.os.Parcel.readException(Parcel.java:1253) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at android.os.Parcel.readException(Parcel.java:1235) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at com.mecom.framework.parser.interfaces.Parser$Stub$Proxy.getArticlesList(Parser.java:174) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at com.mecom.berlingske.NewsListActivity$AsyncGetArticlesTask.doInBackground(NewsListActivity.java:139) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at com.mecom.berlingske.NewsListActivity$AsyncGetArticlesTask.doInBackground(NewsListActivity.java:1) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  ... 4 more 

我可以提供更多的代码(像的AsyncTask的是执行,例如),但事实上,这个代码实际上工作在至少两种情况下让我想知道,这里可能是错误的。有任何想法吗?

UPD:刚刚安装了我的其他应用程序,即使用IPC,在该设备上,同样的问题。从市场上安装 - 工作正常。签署我目前的应用程序,并重新安装它。没有帮助。对我的其他应用程序做了同样的事情 - 也没有帮助。在这些设备上测试我的应用程序的唯一方法是将其部署到市场?

回答

1

NPE是由于您正在进行缺少数据的IPC调用而引起的。这通过在日志中的这些线是明显的:

03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at android.os.Parcel.readException(Parcel.java:1253) 
03-18 13:19:04.051: ERROR/AndroidRuntime(2990):  at android.os.Parcel.readException(Parcel.java:1235) 

要解决的问题,把日志语句之前每次IPC打电话给你做,输出参数为调用日志。这将允许您查明何时,何地以及希望为什么这些IPC调用没有正确的数据。

由于手机没有固定,您可以使用Log Collector(市面上提供的)应用程序从未与您的PC连接的手机收集日志,该日志收集器允许您通过电子邮件或其他方式将手机日志发送给自己。

祝你好运

+0

做了一些随机重构,它终于奏效了。真的不知道,问题是什么。 – folone 2011-03-28 10:20:46

相关问题