2015-06-16 8 views
-6

Я успешно скомпилировал приложение для Android и создал его apk. Я также подписал файл .apk с моим хранилищем ключей. Но это дает мне NullPointerException по какой-то причине при работе в режиме отладки USB.APK создан, но не работает на устройстве

Вот исключение:

06-16 15:23:11.639 30531-30531/com.adi.play E/AndroidRuntime﹕ FATAL EXCEPTION: main 
 
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.adi.play/com.adi.play.PlayActivity}: java.lang.NullPointerException 
 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2277) 
 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403) 
 
      at android.app.ActivityThread.access$600(ActivityThread.java:165) 
 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373) 
 
      at android.os.Handler.dispatchMessage(Handler.java:107) 
 
      at android.os.Looper.loop(Looper.java:194) 
 
      at android.app.ActivityThread.main(ActivityThread.java:5391) 
 
      at java.lang.reflect.Method.invokeNative(Native Method) 
 
      at java.lang.reflect.Method.invoke(Method.java:525) 
 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
 
      at dalvik.system.NativeStart.main(Native Method) 
 
    Caused by: java.lang.NullPointerException 
 
      at android.content.ContextWrapper.getResources(ContextWrapper.java:89) 
 
      at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78) 
 
      at com.adi.play.PlayActivity.<init>(PlayActivity.java:12) 
 
      at java.lang.Class.newInstanceImpl(Native Method) 
 
      at java.lang.Class.newInstance(Class.java:1319) 
 
      at android.app.Instrumentation.newActivity(Instrumentation.java:1123) 
 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268) 
 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403) 
 
            at android.app.ActivityThread.access$600(ActivityThread.java:165) 
 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373) 
 
            at android.os.Handler.dispatchMessage(Handler.java:107) 
 
            at android.os.Looper.loop(Looper.java:194) 
 
            at android.app.ActivityThread.main(ActivityThread.java:5391) 
 
            at java.lang.reflect.Method.invokeNative(Native Method) 
 
            at java.lang.reflect.Method.invoke(Method.java:525) 
 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
 
            at dalvik.system.NativeStart.main(Native Method)

Мой AndroidManifest.xml файл:

<?xml version="1.0" encoding="utf-8"?> 
 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
 
     package="com.adi.play" 
 
     android:versionCode="1" 
 
     android:versionName="1.0"> 
 
    <application android:label="@string/app_name" 
 
    \t android:icon="@drawable/me"> 
 
     <activity android:name="PlayActivity"> 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.MAIN" /> 
 
       <category android:name="android.intent.category.LAUNCHER" /> 
 
      </intent-filter> 
 
     </activity> 
 
    </application> 
 
</manifest>

Мой com.adi.play.PlayActivity .java файл:

package com.adi.play; 
 

 
import android.os.Bundle; 
 
import android.app.Activity; 
 
import android.widget.Button; 
 
import android.widget.TextView; 
 
import android.view.View; 
 
import android.view.View.OnClickListener; 
 

 
public class PlayActivity extends Activity { 
 

 
\t public final String RESULT = getResources().getString(R.string.result); 
 
\t 
 
\t private int total = 0; 
 
\t private TextView displayResult; 
 
\t private Button incrementButton; 
 
\t private Button decrementButton; 
 

 
\t @Override 
 
\t public void onCreate(Bundle bundle) { 
 
\t 
 
\t \t super.onCreate(bundle); 
 
\t \t setContentView(R.layout.activity_play); 
 
\t \t 
 
\t \t displayResult = (TextView)findViewById(R.id.display_result); 
 
\t \t incrementButton = (Button)findViewById(R.id.increment_button); 
 
\t \t decrementButton = (Button)findViewById(R.id.decrement_button); 
 
\t \t 
 
\t \t displayResult.setText(RESULT+total); 
 
\t \t incrementButton.setOnClickListener(new View.OnClickListener() { 
 
\t \t 
 
\t \t \t @Override 
 
\t \t \t public void onClick(View view) { 
 
\t \t \t 
 
\t \t \t \t total++; 
 
\t \t \t \t displayResult.setText(RESULT+total); 
 
\t \t \t } 
 
\t \t }); 
 
\t \t 
 
\t \t decrementButton.setOnClickListener(new View.OnClickListener() { 
 
\t \t 
 
\t \t \t @Override 
 
\t \t \t public void onClick(View view) { 
 
\t \t \t 
 
\t \t \t \t total--; 
 
\t \t \t \t displayResult.setText(RESULT+total); 
 
\t \t \t } 
 
\t \t }); 
 
\t } 
 
}

Пожалуйста, помогите. Меня это раздражает.

+0

сделал u б/у proguard.? –

+0

Поделитесь паролем 'com.adi.play.PlayActivity.java' для лучшей помощи. –

+0

'PlayActivity.java: 12' - здесь останавливается доллар. – Skynet

ответ

3

Это ваша проблема, я не знаю, как ваш IDE не жалуется на то же:

public final String RESULT = getResources().getString(R.string.result); 

попытке присвоить значение RESULT в OnCreate();

Here вы можете найти официальные документы для использования ресурсов в Android и способы доступа к ресурсам.

4

Эта линия приводившая

public final String RESULT = getResources().getString(R.string.result);

метод getResources() необходим context доступен во время разговора, нет доступна контекст при запуске.

Решение:

Initialize RESULT на вашем OnCreate вместо:

public class PlayActivity extends Activity { 

private String result; //this line 

private int total = 0; 
private TextView displayResult; 
private Button incrementButton; 
private Button decrementButton; 

@Override 
public void onCreate(Bundle bundle) { 

    super.onCreate(bundle); 
    setContentView(R.layout.activity_play); 

    result = getResources().getString(R.string.result); //this line 
+1

Спасибо за объяснение. <3 очень люблю человека. Это спасло мою жизнь. Узнал что-то новое от u –

+0

Рад, что я мог бы помочь, и удачи в вашем проекте! – reidzeibel

+1

Хорошее решение, мне было интересно, в чем проблема! – AnswerDroid

1

getResources() требует Context, которая будет создана после того, как onCreate() запускается на выполнение.

Попробуйте этот код.

package com.adi.play; 

import android.os.Bundle; 
import android.app.Activity; 
import android.widget.Button; 
import android.widget.TextView; 
import android.view.View; 
import android.view.View.OnClickListener; 

public class PlayActivity extends Activity { 

    public String RESULT; 

    private int total = 0; 
    private TextView displayResult; 
    private Button incrementButton; 
    private Button decrementButton; 

    @Override 
    public void onCreate(Bundle bundle) { 

     super.onCreate(bundle); 
     setContentView(R.layout.activity_play); 

     RESULT = getResources().getString(R.string.result); 

     displayResult = (TextView)findViewById(R.id.display_result); 
     incrementButton = (Button)findViewById(R.id.increment_button); 
     decrementButton = (Button)findViewById(R.id.decrement_button); 

     displayResult.setText(RESULT+total); 
     incrementButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 

       total++; 
       displayResult.setText(RESULT+total); 
      } 
     }); 

     decrementButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 

       total--; 
       displayResult.setText(RESULT+total); 
      } 
     }); 
    } 
} 
Смежные вопросы