2014-10-26 78 views
0

這是我的第一篇文章,所以請原諒我,如果我違反任何規則。應用活動崩潰

我正在使用ADT編寫應用程序,當我通過按鈕按下啓動我的一項活動時,應用程序不斷崩潰。當我做出其中的一個按鈕時,活動纔開始給我帶來麻煩,運行一段漫長而複雜的Java。我在將NetBeans移植到應用程序之前測試了Java中的Java,並且它的功能完美。當我第一次將代碼添加到src文件時,ADT拒絕了它,因爲我使用了一個String開關,它只在java 1.7中兼容(我正在編譯1.6,而我的android設備有4.2.2,它只支持1.6)。在沒有字符串開關的情況下重寫代碼之後,使用1.6(Android版本4.3.2)編譯的代碼沒有錯誤,但是一旦在設備上運行(基於HyperDrive Rom的Android版本4.2.2),運行運行Java的活動導致應用程序崩潰。
我應該發佈什麼樣的代碼,以便有人可以查看它並發現任何錯誤?

編輯:這裏好夥計們的日誌貓:
10-26 19:19:27.223: W/ActivityThread(22541): Application com.example.cube can be debugged on port 8100... 10-26 19:19:27.603: D/libEGL(22541): loaded /system/lib/egl/libEGL_adreno200.so 10-26 19:19:27.613: D/libEGL(22541): loaded /system/lib/egl/libGLESv1_CM_adreno200.so 10-26 19:19:27.643: D/libEGL(22541): loaded /system/lib/egl/libGLESv2_adreno200.so 10-26 19:19:27.653: I/Adreno200-EGL(22541): <qeglDrvAPI_eglInitialize:265>: EGL 1.4 QUALCOMM build: (CL3579225) 10-26 19:19:27.653: I/Adreno200-EGL(22541): Build Date: 04/22/13 Mon 10-26 19:19:27.653: I/Adreno200-EGL(22541): Local Branch: adreno_sba_20130419 10-26 19:19:27.653: I/Adreno200-EGL(22541): Remote Branch: 10-26 19:19:27.653: I/Adreno200-EGL(22541): Local Patches: 10-26 19:19:27.653: I/Adreno200-EGL(22541): Reconstruct Branch: 10-26 19:19:27.963: D/OpenGLRenderer(22541): Enabling debug mode 0 10-26 19:19:29.605: D/GestureDetector(22541): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 4 mFalseSizeCnt:0 10-26 19:19:30.096: E/SpannableStringBuilder(22541): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 10-26 19:19:30.096: E/SpannableStringBuilder(22541): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 10-26 19:19:30.956: D/GestureDetector(22541): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 6 mFalseSizeCnt:0 10-26 19:19:31.407: E/SpannableStringBuilder(22541): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 10-26 19:19:31.407: E/SpannableStringBuilder(22541): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 10-26 19:19:33.369: D/GestureDetector(22541): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 5 mFalseSizeCnt:0 10-26 19:19:34.250: E/SpannableStringBuilder(22541): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 10-26 19:19:34.250: E/SpannableStringBuilder(22541): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 10-26 19:19:35.391: D/GestureDetector(22541): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 8 mFalseSizeCnt:0 10-26 19:19:35.571: D/AndroidRuntime(22541): Shutting down VM 10-26 19:19:35.571: W/dalvikvm(22541): threadid=1: thread exiting with uncaught exception (group=0x41b906c0) 10-26 19:19:35.591: E/AndroidRuntime(22541): FATAL EXCEPTION: main 10-26 19:19:35.591: E/AndroidRuntime(22541): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.cube/com.example.cube.AlgorithmConverter}: java.lang.NullPointerException 10-26 19:19:35.591: E/AndroidRuntime(22541): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173) 10-26 19:19:35.591: E/AndroidRuntime(22541): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2297) 10-26 19:19:35.591: E/AndroidRuntime(22541): at android.app.ActivityThread.access$700(ActivityThread.java:152) 10-26 19:19:35.591: E/AndroidRuntime(22541): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282) 10-26 19:19:35.591: E/AndroidRuntime(22541): at android.os.Handler.dispatchMessage(Handler.java:99) 10-26 19:19:35.591: E/AndroidRuntime(22541): at android.os.Looper.loop(Looper.java:137) 10-26 19:19:35.591: E/AndroidRuntime(22541): at android.app.ActivityThread.main(ActivityThread.java:5328) 10-26 19:19:35.591: E/AndroidRuntime(22541): at java.lang.reflect.Method.invokeNative(Native Method) 10-26 19:19:35.591: E/AndroidRuntime(22541): at java.lang.reflect.Method.invoke(Method.java:511) 10-26 19:19:35.591: E/AndroidRuntime(22541): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 10-26 19:19:35.591: E/AndroidRuntime(22541): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 10-26 19:19:35.591: E/AndroidRuntime(22541): at dalvik.system.NativeStart.main(Native Method) 10-26 19:19:35.591: E/AndroidRuntime(22541): Caused by: java.lang.NullPointerException 10-26 19:19:35.591: E/AndroidRuntime(22541): at android.app.Activity.findViewById(Activity.java:1886) 10-26 19:19:35.591: E/AndroidRuntime(22541): at com.example.cube.AlgorithmConverter.<init>(AlgorithmConverter.java:15) 10-26 19:19:35.591: E/AndroidRuntime(22541): at java.lang.Class.newInstanceImpl(Native Method) 10-26 19:19:35.591: E/AndroidRuntime(22541): at java.lang.Class.newInstance(Class.java:1319) 10-26 19:19:35.591: E/AndroidRuntime(22541): at android.app.Instrumentation.newActivity(Instrumentation.java:1071) 10-26 19:19:35.591: E/AndroidRuntime(22541): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164) 10-26 19:19:35.591: E/AndroidRuntime(22541): ... 11 more
我敢肯定,XML是聲音,但Java是漫長的,很難甚至評論明白,所以我猶豫張貼。
請幫忙!
非常感謝!

+1

您應該發佈負責按鈕的類的代碼,然後發佈按鈕的XML。 – 2014-10-26 19:44:29

+4

或者至少有一些崩潰日誌。 – 2014-10-26 19:46:52

+0

現在沒有代碼,只是來自logcat的堆棧跟蹤。 – Simon 2014-10-26 20:05:56

回答

0

This提供了一個很好的例子,說明如何讓一個按鈕開始一個新的活動。

從Mkyong的帖子關鍵信息:

在你想要的按鈕放置以下,或者如果你已經有一個按鈕,給它一個ID,或者如果你已經做了所有這招到活動下一步。

<Button 
     android:id="@+id/button1" <!-- Id of your button --> 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Click me to another screen" /> 

您的主要活動(或在您的按鈕上應包含以下活動:

package com.mkyong.android; // Name of package, change if necessary 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Button; 
import android.view.View; 
import android.view.View.OnClickListener; 

public class AppActivity extends Activity { 

    Button button; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     addListenerOnButton(); 
    } 

    public void addListenerOnButton() { 

     final Context context = this; 

     button = (Button) findViewById(R.id.button1); // ID of your button, change if necessary 

     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       Intent intent = new Intent(context, App2Activity.class); // Name of second activity's class, change if necessary 
          startActivity(intent); 

      } 

     }); 

    } 

就是這樣,只要你有有一類設置你的第二個活動或XML那麼你就不需要再往前走如果你沒有一個類你的第二個活動創建下面的代碼一個和地點:

package com.mkyong.android; //name of package, change if necessary 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.Button; 

public class App2Activity extends Activity { 

    Button button; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main2); // Name of second XML, change if necessary 
    } 

} 

看到,因爲你並不需要複雜的Java爲了實現這一行動,使用上述更簡單的替代方案會更好,並且可以最大限度地減少問題。