GVKun编程网logo

android – 具有不确定ProgressBar的UI的“java.lang.RuntimeException:无法启动intent”

15

在本文中,我们将带你了解android–具有不确定ProgressBar的UI的“java.lang.RuntimeException:无法启动intent”在这篇文章中,同时我们还将给您一些技巧,以

在本文中,我们将带你了解android – 具有不确定ProgressBar的UI的“java.lang.RuntimeException:无法启动intent”在这篇文章中,同时我们还将给您一些技巧,以帮助您实现更有效的Android FATAL EXCEPTION MAIN:java.lang.RuntimeException:无法启动活动ComponentInfo、Android java.lang.RuntimeException:无法实例化活动ComponentInfo … java.lang.NullPointerException、Android Proguard ExceptionInInitializerError和RuntimeException、Android Robolectric – ContentProvider中queryBuilder.query()中的RuntimeException / InstantiationException

本文目录一览:

android – 具有不确定ProgressBar的UI的“java.lang.RuntimeException:无法启动intent”

android – 具有不确定ProgressBar的UI的“java.lang.RuntimeException:无法启动intent”

使用 AndroidJUnitRunner显示不确定的ProgressBars是否存在任何已知问题?我在测试期间遇到了这个错误:

05-26 15:22:48.504    1003-1016/? I/TestRunner﹕
java.lang.RuntimeException: Could not launch intent Intent {
act=android.intent.action.MAIN flg=0x14000000
cmp=com.cookbrite.dev/com.cookbrite.ui.HomeListActivity } within 45
seconds. Perhaps the main thread has not gone idle within a reasonable
amount of time? There Could be an animation or something constantly
repainting the screen. Or the activity is doing network calls on
creation? See the threaddump logs. For your reference the last time
the event queue was idle before your activity launch request was
1432668122421 and Now the last time the queue went idle was:
1432668122421. If these numbers are the same your activity might be hogging the event queue.

堆栈跟踪是:

05-26 15:22:48.504    1003-1016/? I/TestRunner﹕ java.lang.RuntimeException: Could not launch intent Intent { act=android.intent.action.MAIN flg=0x14000000 cmp=com.cookbrite.dev/com.cookbrite.ui.HomeListActivity } within 45 seconds. Perhaps the main thread has not gone idle within a reasonable amount of time? There Could be an animation or something constantly repainting the screen. Or the activity is doing network calls on creation? See the threaddump logs. For your reference the last time the event queue was idle before your activity launch request was 1432668122421 and Now the last time the queue went idle was: 1432668122421. If these numbers are the same your activity might be hogging the event queue.
            at android.support.test.runner.MonitoringInstrumentation.startActivitySync(MonitoringInstrumentation.java:274)
            at android.test.InstrumentationTestCase.launchActivityWithIntent(InstrumentationTestCase.java:119)
            at android.test.InstrumentationTestCase.launchActivity(InstrumentationTestCase.java:97)
            at android.test.ActivityInstrumentationTestCase2.getActivity(ActivityInstrumentationTestCase2.java:104)
            at com.cookbrite.step2_functional.ui.homelist.HomeListFragmentLoadingTest.testLoadingSpinner(HomeListFragmentLoadingTest.java:40)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
            at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
            at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
            at com.cookbrite.util.BaseBlackBoxTest.doRunTest(BaseBlackBoxTest.java:300)
            at com.cookbrite.util.BaseBlackBoxTest.access$000(BaseBlackBoxTest.java:44)
            at com.cookbrite.util.BaseBlackBoxTest$1.call(BaseBlackBoxTest.java:271)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:841)

由上述超时触发的线程转储显示ProgressBar似乎涉及:

05-26 15:22:48.135    1003-1018/? E/THREAD_STATE﹕ Thread[main,5,main]
    android.graphics.Canvas.native_drawBitmap(Native Method)
    android.graphics.Canvas.drawBitmap(Canvas.java:1160)
    android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:440)
    android.graphics.drawable.RotateDrawable.draw(RotateDrawable.java:88)
    android.graphics.drawable.LayerDrawable.draw(LayerDrawable.java:345)
    android.widget.ProgressBar.onDraw(ProgressBar.java:1052)
    android.view.View.draw(View.java:13944)
    android.view.View.draw(View.java:13825)
    android.view.ViewGroup.drawChild(ViewGroup.java:3086)
    android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
    android.view.View.draw(View.java:13823)
    android.view.ViewGroup.drawChild(ViewGroup.java:3086)
    android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
    android.view.View.draw(View.java:13947)
    android.view.View.draw(View.java:13825)
    android.view.ViewGroup.drawChild(ViewGroup.java:3086)
    android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
    android.view.View.draw(View.java:13823)
    android.view.ViewGroup.drawChild(ViewGroup.java:3086)
    android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
    android.view.View.draw(View.java:13947)
    android.widget.FrameLayout.draw(FrameLayout.java:467)
    android.view.View.draw(View.java:13825)
    android.view.ViewGroup.drawChild(ViewGroup.java:3086)
    android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
    android.view.View.draw(View.java:13823)
    android.view.ViewGroup.drawChild(ViewGroup.java:3086)
    android.view.ViewGroup.dispatchDraw(ViewGroup.java:2923)
    android.view.View.draw(View.java:13947)
    android.widget.FrameLayout.draw(FrameLayout.java:467)
    com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2224)
    android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2482)
    android.view.ViewRootImpl.draw(ViewRootImpl.java:2395)
    android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2239)
    android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1872)
    android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
    android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
    android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
    android.view.Choreographer.doCallbacks(Choreographer.java:562)
    android.view.Choreographer.doFrame(Choreographer.java:532)
    android.view.Choreographer$FramedisplayEventReceiver.run(Choreographer.java:735)
    android.os.Handler.handleCallback(Handler.java:730)
    android.os.Handler.dispatchMessage(Handler.java:92)
    android.os.Looper.loop(Looper.java:137)
    android.app.ActivityThread.main(ActivityThread.java:5103)
    java.lang.reflect.Method.invokeNative(Native Method)
    java.lang.reflect.Method.invoke(Method.java:525)
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    dalvik.system.NativeStart.main(Native Method)
    Thread[Binder_2,main]
    dalvik.system.NativeStart.run(Native Method)
    Thread[JDWP,system]
    dalvik.system.NativeStart.run(Native Method)
    Thread[pool-1-thread-1,main]
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:364)
    android.app.Instrumentation.startActivitySync(Instrumentation.java:403)
    android.support.test.runner.MonitoringInstrumentation.access$101(MonitoringInstrumentation.java:69)
    android.support.test.runner.MonitoringInstrumentation$3.call(MonitoringInstrumentation.java:265)
    android.support.test.runner.MonitoringInstrumentation$3.call(MonitoringInstrumentation.java:262)
    java.util.concurrent.FutureTask.run(FutureTask.java:234)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    java.lang.Thread.run(Thread.java:841)
    Thread[pool-5-thread-1,main]
    dalvik.system.VMStack.getThreadStackTrace(Native Method)
    java.lang.Thread.getStackTrace

解决方法

我认为你不能真正测试进度条,看它们是否完成.

我们使用进度条来表示我们在多大程度上及时(例如30天周期中的第7天,因此我们的进度条从未完成).为避免此问题,我们必须为我们的应用程序使用不同的API级别.我们似乎只对API级别为21的仿真器出现此问题.一旦我们将仿真器切换到API级别19,我们的测试就成功了.

注意:我们在使用普通视图更改progressBar方面也取得了一些成功,但我们认为这比我们喜欢的更糟糕.

Android FATAL EXCEPTION MAIN:java.lang.RuntimeException:无法启动活动ComponentInfo

Android FATAL EXCEPTION MAIN:java.lang.RuntimeException:无法启动活动ComponentInfo

我是编程android的nubie,我知道这里有4m是很多页面为我的问题打乱解决方案,但现在我输了2天仍然没有得到解决方案.请帮我!

首先是我的错误:

01-02 11:08:27.314: D/AndroidRuntime(1045): Shutting down VM
01-02 11:08:27.314: W/dalvikvm(1045): threadid=1: thread exiting with uncaught exception (group=0x409e61f8)
01-02 11:08:27.324: E/AndroidRuntime(1045): FATAL EXCEPTION: main
01-02 11:08:27.324: E/AndroidRuntime(1045): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.wifiscan/com.example.wifiscan.activity_wifi_scan}: java.lang.classNotFoundException: com.example.wifiscan.activity_wifi_scan
01-02 11:08:27.324: E/AndroidRuntime(1045):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1880)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at android.os.Looper.loop(Looper.java:137)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at android.app.ActivityThread.main(ActivityThread.java:4424)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at java.lang.reflect.Method.invokeNative(Native Method)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at java.lang.reflect.Method.invoke(Method.java:511)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at dalvik.system.NativeStart.main(Native Method)
01-02 11:08:27.324: E/AndroidRuntime(1045): Caused by: java.lang.classNotFoundException: com.example.wifiscan.activity_wifi_scan
01-02 11:08:27.324: E/AndroidRuntime(1045):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at java.lang.classLoader.loadClass(ClassLoader.java:501)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at java.lang.classLoader.loadClass(ClassLoader.java:461)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
01-02 11:08:27.324: E/AndroidRuntime(1045):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1871)
01-02 11:08:27.324: E/AndroidRuntime(1045):     ... 11 more

我的WifiScan:

 public class WifiScan extends Activity implements OnClickListener {      
     WifiManager wifi;       
     ListView lv;
     TextView textStatus;
     Button buttonScan;
     int size = 0;
     List<ScanResult> results;

     String ITEM_KEY = "key";
     ArrayList<HashMap<String, String>> arraylist = new ArrayList<HashMap<String, String>>();
     SimpleAdapter adapter;

     /* Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) 
     {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_wifi_scan);

         buttonScan = (Button) findViewById(R.id.scan);
         buttonScan.setonClickListener(this);
         lv = (ListView)findViewById(R.id.list);

         wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
         if (wifi.isWifiEnabled() == false)
         {
             Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show();
             wifi.setWifiEnabled(true);
         }   
         wifi.startScan(); //js dopisal
      //   this.adapter = new SimpleAdapter(WiFiDemo.this, arraylist, R.layout.row, new String[] { ITEM_KEY }, new int[] { R.id.list_value });
         lv.setAdapter(this.adapter);

              registerReceiver(new broadcastReceiver()
         {
             @Override
             public void onReceive(Context c, Intent intent) 
             {
                results = wifi.getScanResults();
                size = results.size();
             }
         }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));                    
     }

     public void onClick(View view) 
     {
         arraylist.clear();          
         wifi.startScan();

              Toast.makeText(this, "Scanning...." + size, Toast.LENGTH_SHORT).show();
         try 
         {
             size = size - 1;
             while (size >= 0) 
             {   
                 HashMap<String, String> item = new HashMap<String, String>();                       
                 item.put(ITEM_KEY, results.get(size).SSID + "  " + results.get(size).capabilities);

                 arraylist.add(item);     
                size--;
                 adapter.notifyDataSetChanged();                 
             } 
         }
         catch (Exception e)
         { }         
     }    
 }

我的activity_wifi_scan.xml文件:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/TableLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".WifiScan" >

    <Button    
        android:id="@+id/scan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="scan"
        android:text="SCAN" />

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</TableLayout>

和我的AndroidManifest文件:

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

        <uses-premission android:name="android.permission.ACCESS_WIFI_STATE"/>
         <uses-permission android:name="android.permission.WAKE_LOCK"/>
        <uses-permission android:name="android.permission.INTERNET"/>
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
     <uses-permission android:name="android.permission.INTERNET"></uses-permission>
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
     <uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission>
     <uses-permission android:name="android.permission.INTERNET"> </uses-permission>

     <uses-sdk
          android:minSdkVersion="8"
         android:targetSdkVersion="17" />

     <application
         android:allowBackup="true"
         android:icon="@drawable/ic_launcher"
         android:label="@string/app_name"
         android:theme="@style/AppTheme" >

     <activity android:name=".activity_wifi_scan">
         <intent-filter>
                 <action android:name="android.intent.action.MAIN"></action>
                 <category android:name="android.intent.category.LAUNCHER"></category>
                 <data />
         </intent-filter>
     </activity>

     <receiver android:name=".activity_wifi_scan">
         <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER"/>
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
         </intent-filter>
     </receiver>        
     </application>
 </manifest>

解决方法:

您的活动名称是WifiScan但您已将其声明为.activity_wifi_scan更改它并重试.

更改<活动>要素:

<activity android:name=".WifiScan">
         <intent-filter>
                 <action android:name="android.intent.action.MAIN"></action>
                 <category android:name="android.intent.category.LAUNCHER"></category>
                 <data />
         </intent-filter>
     </activity>

Android java.lang.RuntimeException:无法实例化活动ComponentInfo … java.lang.NullPointerException

Android java.lang.RuntimeException:无法实例化活动ComponentInfo … java.lang.NullPointerException

出于某种原因,每次尝试启动我的应用程序时,我都会出现以下错误:

Unable to instantiate activity ComponentInfo{com.example.lifeahead/com.example.lifeahead.MainActivity}:java.lang.NullPointerException

我检查了清单文件,并添加了所有活动.

我启动应用程序时使用的唯一方法是:

private void logIn(){
    Button logIn = (Button) findViewById(R.id.login);
    logIn.setonClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // Todo Auto-generated method stub
            Intent loginIntent = new Intent(MainActivity.this, HomeActivity.class);
            loginIntent.putExtra("cmUN", cmUN);
            loginIntent.putExtra("cmPW", cmPW);
            startActivity(loginIntent);
        }
    });
}

这是onCreate:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    logIn();
}

完整日志:

Ë

/AndroidRuntime(1607): FATAL EXCEPTION: main
E/AndroidRuntime(1607): Process: com.example.lifeahead, PID: 1607
E/AndroidRuntime(1607): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.lifeahead/com.example.lifeahead.MainActivity}: java.lang.NullPointerException
E/AndroidRuntime(1607):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2121)
E/AndroidRuntime(1607):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
E/AndroidRuntime(1607):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
E/AndroidRuntime(1607):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
E/AndroidRuntime(1607):     at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(1607):     at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(1607):     at android.app.ActivityThread.main(ActivityThread.java:5017)
E/AndroidRuntime(1607):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(1607):     at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(1607):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
E/AndroidRuntime(1607):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
E/AndroidRuntime(1607):     at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(1607): Caused by: java.lang.NullPointerException
E/AndroidRuntime(1607):     at android.app.Activity.findViewById(Activity.java:1884)
E/AndroidRuntime(1607):     at com.example.lifeahead.MainActivity.<init>(MainActivity.java:22)
E/AndroidRuntime(1607):     at java.lang.class.newInstanceImpl(Native Method)
E/AndroidRuntime(1607):     at java.lang.class.newInstance(Class.java:1208)
E/AndroidRuntime(1607):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
E/AndroidRuntime(1607):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2112)
E/AndroidRuntime(1607):     ... 11 more

我感谢所有帮助!

解决方法:

stacktrace告诉你

  Button logIn = (Button) findViewById(R.id.login);

findViewById返回的对象为null,因为您拥有的唯一方法是logIn(). findViewById返回null的唯一原因是因为您正在查找不属于当前活动的视图层次结构的视图

Android Proguard ExceptionInInitializerError和RuntimeException

Android Proguard ExceptionInInitializerError和RuntimeException

我想混淆我的.apk,我和Proguard有些麻烦.使用eclipse我启用了这个:

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

我正在使用4个外部库:

> android-support-v4.jar
>九岁的android-lib.jar
> gson-2.2.2.jar
> commons-io-2.4.jar

我想我在使用gson时遇到了麻烦:

private static Type MY_DATA_TYPE = new Typetoken<Pair<Map<Point, Void>, Integer>>() {}.getType();

我每次使用它:

FATAL EXCEPTION: main
java.lang.ExceptionInInitializerError at com.myapp.MyActivity.onCreate(UnkNown Source)

...

Caused by: java.lang.RuntimeException: Missing type parameter.
at com.google.gson.reflect.Typetoken.getSuperclasstypeParameter(UnkNown Source)
at com.google.gson.reflect.Typetoken.<init>(UnkNown Source)

我正在使用这个选项,但我想它不会有帮助:

-keepattributes Exceptions, InnerClasses, *Annotation*, EnclosingMethod

-dontskipnonpubliclibraryclassmembers
-libraryjars .../libs/android-support-v4.jar
-libraryjars .../libs/nine-old-android-lib.jar
-libraryjars .../libs/gson-2.2.2.jar
-libraryjars .../libs/commons-io-2.4.jar


-keep class java.** { *; }
-keep class android.** { *; }
-keep class org.** { *; }
-keep class com.google.** { *; }
-keep class com.facebook.** { *; }
-keep class com.nineoldandroids.** { *; }

我该如何解决这个问题并创建一个可以正常工作的混淆的.apk?
谢谢你的时间.

解决方法:

猜猜这是一个gson“问题”,这是解决方案:

-keepattributes Signature
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.examples.android.model.** { *; }

感谢https://groups.google.com/forum/#!topic/google-gson/6XuHfOoZIKo

Android Robolectric – ContentProvider中queryBuilder.query()中的RuntimeException / InstantiationException

Android Robolectric – ContentProvider中queryBuilder.query()中的RuntimeException / InstantiationException

我在ContentProvider上进行了大约十次测试,只使用了sqlite; all pass保存在Content Provider的query()方法中通过queryBuilder.query()的两个.

正在测试的方法在实际应用中起作用!

这是API 17 r2和RoboLectric:
robolectric-2.0-α-3-20130417.013705-46-罐与 – dependencies.jar

@Override
public Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder) {
    Log.d(Constants.TAG,"MyContentProvider.query()");
    switch(matcher.match(uri)) {
    case ITEM: // OK
        selection = "_id = ?";
        selectionArgs = new String[]{ Long.toString(ContentUris.parseId(uri)) };
    case ITEMS: // OK
        break;
    default:
        throw new IllegalArgumentException("Did not recognize URI " + uri);
    }
    // build the query with sqliteQueryBuilder
    sqliteQueryBuilder qBuilder = new sqliteQueryBuilder();
    qBuilder.setTables(TABLE_NAME);

    // query the database and get result in cursor
    final sqliteDatabase db = mDatabase.getReadableDatabase();
    Cursor resultCursor = qBuilder.query(db,// Line 112 in trace
            projection,selection,selectionArgs,null,sortOrder,null);
    resultCursor.setNotificationUri(getContext().getContentResolver(),uri);
    return resultCursor;
}

这是追溯:

java.lang.RuntimeException: java.lang.InstantiationException
    at org.robolectric.bytecode.ShadowWrangler.createShadowFor(ShadowWrangler.java:300)
    at org.robolectric.bytecode.ShadowWrangler.initializing(ShadowWrangler.java:74)
    at org.robolectric.bytecode.RobolectricInternals.initializing(RobolectricInternals.java:90)
    at android.database.sqlite.sqliteQuery.$$robo$init(sqliteQuery.java)
    at android.database.sqlite.sqliteClosable.<init>(sqliteClosable.java:26)
    at android.database.sqlite.sqliteProgram.<init>(sqliteProgram.java:41)
    at android.database.sqlite.sqliteQuery.<init>(sqliteQuery.java:37)
    at android.database.sqlite.sqliteDirectCursorDriver.query(sqliteDirectCursorDriver.java:44)
    at android.database.sqlite.sqliteDatabase.rawQueryWithFactory(sqliteDatabase.java:1314)
    at android.database.sqlite.sqliteQueryBuilder.query(sqliteQueryBuilder.java:400)
    at android.database.sqlite.sqliteQueryBuilder.query(sqliteQueryBuilder.java:333)
    at com.example.readingsprovider.ReadingsContentProvider.query(ReadingsContentProvider.java:112)
    at com.example.readingsprovider.test.ContentProviderTest.testUpdateMultipleWithoutWhere(ContentProviderTest.java:110)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:267)
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
    at org.junit.runners.BlockJUnit4ClassRunner.runchild(BlockJUnit4ClassRunner.java:71)
    at org.junit.runners.BlockJUnit4ClassRunner.runchild(BlockJUnit4ClassRunner.java:49)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runchildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:202)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.InstantiationException
    at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.class.newInstance0(Class.java:357)
    at java.lang.class.newInstance(Class.java:310)
    at org.robolectric.bytecode.ShadowWrangler.createShadowFor(ShadowWrangler.java:293)
    at org.robolectric.bytecode.ShadowWrangler.initializing(ShadowWrangler.java:74)
    at org.robolectric.bytecode.RobolectricInternals.initializing(RobolectricInternals.java:90)
    at android.database.sqlite.sqliteQuery.$$robo$init(sqliteQuery.java)
    at android.database.sqlite.sqliteClosable.<init>(sqliteClosable.java:26)
    at android.database.sqlite.sqliteProgram.<init>(sqliteProgram.java:41)
    at android.database.sqlite.sqliteQuery.<init>(sqliteQuery.java:37)
    at android.database.sqlite.sqliteDirectCursorDriver.$$robo$$sqliteDirectCursorDriver_7ac1_query(sqliteDirectCursorDriver.java:44)
    at android.database.sqlite.sqliteDirectCursorDriver.query(sqliteDirectCursorDriver.java)
    at android.database.sqlite.sqliteDatabase.$$robo$$sqliteDatabase_ab15_rawQueryWithFactory(sqliteDatabase.java:1314)
    at android.database.sqlite.sqliteDatabase.rawQueryWithFactory(sqliteDatabase.java)
    at android.database.sqlite.sqliteQueryBuilder.$$robo$$sqliteQueryBuilder_ba4d_query(sqliteQueryBuilder.java:400)
    at android.database.sqlite.sqliteQueryBuilder.query(sqliteQueryBuilder.java)
    at android.database.sqlite.sqliteQueryBuilder.$$robo$$sqliteQueryBuilder_ba4d_query(sqliteQueryBuilder.java:333)
    at android.database.sqlite.sqliteQueryBuilder.query(sqliteQueryBuilder.java)
    at com.example.readingsprovider.ReadingsContentProvider.query(ReadingsContentProvider.java:112)
    at com.example.readingsprovider.test.ContentProviderTest.testUpdateMultipleWithoutWhere(ContentProviderTest.java:110)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    ... 21 more

可以告诉我这是否是Robolectric的限制,还是我的不好?非常感谢!

附:如果Reflection API将失败的类名放在InstantiationException消息中,难道不是梦幻般的吗?

解决方法

我的项目有同样的问题,终于能够用一些谷歌搜索和U Avalos的前一个答案来解决它

1.创建自定义sqliteShadow

@Implements(value = sqliteDatabase.class,inheritImplementationMethods = true)
public class CustomsqliteShadow extends ShadowsqliteDatabase {

    @Implementation
    public Cursor rawQueryWithFactory (sqliteDatabase.CursorFactory cursorFactory,String sql,String editTable,CancellationSignal cancellationSignal) {
      return rawQueryWithFactory(cursorFactory,sql,editTable);
    }
}

2.将@Config注释添加到测试中

要使用自定义阴影类,可以在robolectric2中使用@Config注释

@RunWith(RobolectricTestRunner.class)
@Config( shadows = {CustomsqliteShadow.class})
public class ContentProviderTest {

参考

http://robolectric.blogspot.co.at/2013/05/configuring-robolectric-20.html

关于android – 具有不确定ProgressBar的UI的“java.lang.RuntimeException:无法启动intent”的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android FATAL EXCEPTION MAIN:java.lang.RuntimeException:无法启动活动ComponentInfo、Android java.lang.RuntimeException:无法实例化活动ComponentInfo … java.lang.NullPointerException、Android Proguard ExceptionInInitializerError和RuntimeException、Android Robolectric – ContentProvider中queryBuilder.query()中的RuntimeException / InstantiationException的相关信息,请在本站寻找。

本文标签: