问题
I'm trying to write an extension to SeekBar to customise it's behaviour.
I'm having problems getting the most basic form of the new class to run in the emulator.
I can't even get a class that doesn't add any new functionality to start up.
Can anybody tell me what basic thing I'm missing out here? Why won't the app initialise correctly when I try to use an ExtendedSeekBar? Where do I find details of the exception that has occurred?
I running Eclipse on XP, using Android SDK tools revision 10. What other information should I provide?
Thanks for any help.
Here's the detail of what I'm trying to do.
Starting from the Hello World tutorial app I extend main.xml to include a standard SeekBar and update HelloAndroid.java to find the object and set the progress to 25.
Here's main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<SeekBar
android:id="@+id/SeekBar01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
and here's HelloAndroid.java:
package com.example.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SeekBar vSeekBar1 = (SeekBar)findViewById(R.id.SeekBar01);
vSeekBar1.setProgress(25);
}
}
I run this and, no problem, the SeekBar appears in the app on the emulator with tthe progress correctly set
No problems so far...
So, now I want to start to extend the SeekBar.
I update main.xml to change SeekBar to ExtendedSeekbar
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<ExtendedSeekBar
android:id="@+id/SeekBar01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
and HelloAndroid.java to find the new object
package com.example.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ExtendedSeekBar vSeekBar1 = (ExtendedSeekBar)findViewById(R.id.SeekBar01);
vSeekBar1.setProgress(25);
}
}
I create a new class that just contains the new Constructors and an initialise function that is called by each constructor (so I can set a single breakpoint)
ExtendedSeekBar.java
package com.example.helloandroid;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.SeekBar;
public class ExtendedSeekBar extends SeekBar {
public ExtendedSeekBar(Context context) {
super(context);
Initialise();
}
public ExtendedSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
Initialise();
}
public ExtendedSeekBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
Initialise();
}
void Initialise(){
Log.i("ESB","ExtendedSeekBar Initialise ");
}
}
Now, when I run it I get the Debug View appear with the following stack dump
HelloAndroid [Android Application]
DalvikVM[localhost:8628]
Thread [<1> main] (Suspended (exception RuntimeException))
ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 1647
ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 1663
ActivityThread.access$1500(ActivityThread, ActivityThread$ActivityClientRecord, Intent) line: 117
ActivityThread$H.handleMessage(Message) line: 931
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 3683
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 507
ZygoteInit$MethodAndArgsCaller.run() line: 839
ZygoteInit.main(String[]) line: 597
NativeStart.main(String[]) line: not available [native method]
Thread [<8> Binder Thread #2] (Running)
Thread [<7> Binder Thread #1] (Running)
The LogCat window contains the following
03-31 17:44:56.628: DEBUG/AndroidRuntime(589): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
03-31 17:44:56.628: DEBUG/AndroidRuntime(589): CheckJNI is ON
03-31 17:44:57.518: DEBUG/AndroidRuntime(589): Calling main entry com.android.commands.pm.Pm
03-31 17:44:57.749: DEBUG/dalvikvm(239): GC_EXPLICIT freed 3K, 54% free 2544K/5511K, external 410K/517K, paused 72ms
03-31 17:44:57.759: WARN/ActivityManager(61): No content provider found for:
03-31 17:44:57.778: WARN/ActivityManager(61): No content provider found for:
03-31 17:44:57.817: DEBUG/PackageParser(61): Scanning package: /data/app/vmdl-558475578.tmp
03-31 17:44:57.909: INFO/PackageManager(61): Removing non-system package:com.example.helloandroid
03-31 17:44:57.909: INFO/ActivityManager(61): Force stopping package com.example.helloandroid uid=10037
03-31 17:44:57.979: INFO/Process(61): Sending signal. PID: 577 SIG: 9
03-31 17:44:58.009: INFO/WindowManager(61): WIN DEATH: Window{40657ca8 com.example.helloandroid/com.example.helloandroid.HelloAndroid paused=false}
03-31 17:44:58.159: WARN/InputManagerService(61): Got RemoteException sending setActive(false) notification to pid 577 uid 10037
03-31 17:44:58.597: DEBUG/dalvikvm(61): GC_CONCURRENT freed 483K, 42% free 4431K/7623K, external 809K/1222K, paused 8ms+9ms
03-31 17:44:58.748: DEBUG/PackageManager(61): Scanning package com.example.helloandroid
03-31 17:44:58.748: INFO/PackageManager(61): Package com.example.helloandroid codePath changed from /data/app/com.example.helloandroid-1.apk to /data/app/com.example.helloandroid-2.apk; Retaining data and using new
03-31 17:44:58.768: INFO/PackageManager(61): Unpacking native libraries for /data/app/com.example.helloandroid-2.apk
03-31 17:44:58.798: DEBUG/installd(35): DexInv: --- BEGIN '/data/app/com.example.helloandroid-2.apk' ---
03-31 17:44:59.038: DEBUG/dalvikvm(598): DexOpt: load 62ms, verify+opt 15ms
03-31 17:44:59.058: DEBUG/installd(35): DexInv: --- END '/data/app/com.example.helloandroid-2.apk' (success) ---
03-31 17:44:59.058: WARN/PackageManager(61): Code path for pkg : com.example.helloandroid changing from /data/app/com.example.helloandroid-1.apk to /data/app/com.example.helloandroid-2.apk
03-31 17:44:59.058: WARN/PackageManager(61): Resource path for pkg : com.example.helloandroid changing from /data/app/com.example.helloandroid-1.apk to /data/app/com.example.helloandroid-2.apk
03-31 17:44:59.058: DEBUG/PackageManager(61): Activities: com.example.helloandroid.HelloAndroid
03-31 17:44:59.078: INFO/ActivityManager(61): Force stopping package com.example.helloandroid uid=10037
03-31 17:44:59.178: INFO/installd(35): move /data/dalvik-cache/data@app@com.example.helloandroid-2.apk@classes.dex -> /data/dalvik-cache/data@app@com.example.helloandroid-2.apk@classes.dex
03-31 17:44:59.178: DEBUG/PackageManager(61): New package installed in /data/app/com.example.helloandroid-2.apk
03-31 17:44:59.278: INFO/ActivityManager(61): Force stopping package com.example.helloandroid uid=10037
03-31 17:44:59.369: DEBUG/dalvikvm(129): GC_EXPLICIT freed 3K, 53% free 2850K/5959K, external 1527K/1970K, paused 72ms
03-31 17:44:59.621: WARN/RecognitionManagerService(61): no available voice recognition services found
03-31 17:44:59.958: DEBUG/dalvikvm(185): GC_EXPLICIT freed 94K, 52% free 2758K/5703K, external 410K/517K, paused 559ms
03-31 17:45:00.098: DEBUG/dalvikvm(61): GC_EXPLICIT freed 474K, 43% free 4349K/7623K, external 807K/1222K, paused 138ms
03-31 17:45:00.198: INFO/installd(35): unlink /data/dalvik-cache/data@app@com.example.helloandroid-1.apk@classes.dex
03-31 17:45:00.218: DEBUG/AndroidRuntime(589): Shutting down VM
03-31 17:45:00.249: DEBUG/dalvikvm(589): GC_CONCURRENT freed 101K, 72% free 295K/1024K, external 0K/0K, paused 2ms+2ms
03-31 17:45:00.249: DEBUG/jdwp(589): Got wake-up signal, bailing out of select
03-31 17:45:00.249: DEBUG/dalvikvm(589): Debugger has detached; object registry had 1 entries
03-31 17:45:00.278: INFO/AndroidRuntime(589): NOTE: attach of thread 'Binder Thread #3' failed
03-31 17:45:01.029: DEBUG/AndroidRuntime(603): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
03-31 17:45:01.029: DEBUG/AndroidRuntime(603): CheckJNI is ON
03-31 17:45:01.978: DEBUG/AndroidRuntime(603): Calling main entry com.android.commands.am.Am
03-31 17:45:02.029: INFO/ActivityManager(61): Force stopping package com.example.helloandroid uid=10037
03-31 17:45:02.029: INFO/ActivityManager(61): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.helloandroid/.HelloAndroid } from pid 603
03-31 17:45:02.168: DEBUG/AndroidRuntime(603): Shutting down VM
03-31 17:45:02.199: INFO/ActivityManager(61): Start proc com.example.helloandroid for activity com.example.helloandroid/.HelloAndroid: pid=612 uid=10037 gids={}
03-31 17:45:02.248: INFO/AndroidRuntime(603): NOTE: attach of thread 'Binder Thread #3' failed
03-31 17:45:02.267: DEBUG/dalvikvm(603): GC_CONCURRENT freed 102K, 69% free 322K/1024K, external 0K/0K, paused 4ms+1ms
03-31 17:45:02.289: DEBUG/jdwp(603): Got wake-up signal, bailing out of select
03-31 17:45:02.289: DEBUG/dalvikvm(603): Debugger has detached; object registry had 1 entries
03-31 17:45:03.208: WARN/ActivityThread(612): Application com.example.helloandroid is waiting for the debugger on port 8100...
03-31 17:45:03.288: INFO/System.out(612): Sending WAIT chunk
03-31 17:45:03.298: INFO/dalvikvm(612): Debugger is active
03-31 17:45:03.358: INFO/System.out(612): Debugger has connected
03-31 17:45:03.409: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:03.608: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:03.808: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:04.018: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:04.218: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:04.419: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:04.628: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:04.828: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:05.038: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:05.248: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:05.449: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:05.648: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:05.859: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:06.058: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:06.268: INFO/System.out(612): waiting for debugger to settle...
03-31 17:45:06.479: INFO/System.out(612): debugger has settled (1340)
03-31 17:45:12.150: WARN/ActivityManager(61): Launch timeout has expired, giving up wake lock!
03-31 17:45:13.158: WARN/ActivityManager(61): Activity idle timeout for HistoryRecord{40556f78 com.example.helloandroid/.HelloAndroid}
03-31 17:45:18.238: DEBUG/dalvikvm(239): GC_EXPLICIT freed 6K, 54% free 2543K/5511K, external 410K/517K, paused 53ms
03-31 17:45:23.369: DEBUG/dalvikvm(287): GC_EXPLICIT freed 9K, 54% free 2597K/5639K, external 410K/517K, paused 119ms
03-31 17:45:28.339: DEBUG/dalvikvm(329): GC_EXPLICIT freed <1K, 54% free 2539K/5511K, external 410K/517K, paused 51ms
03-31 17:45:33.409: DEBUG/dalvikvm(129): GC_EXPLICIT freed 76K, 51% free 2929K/5959K, external 1542K/1970K, paused 110ms
03-31 17:45:38.949: DEBUG/SntpClient(61): request time failed: java.net.SocketException: Address family not supported by protocol
and the app appears in the emulator without any of the items specified by main.xml, just the title bar. The breakpoint I set in ExtendedSeekBar::initialise is not encountered.
回答1:
You need to add the view to the xml in the following way:
<view class="com.example.helloandroid.ExtendedSeekBar"...
回答2:
in xml create seek bar using
<com.example.helloandroid.ExtendedSeekBar
/>
来源:https://stackoverflow.com/questions/5504712/cannot-run-android-app-with-own-class-which-extends-seekbar