2013-09-02 5 views
-1

эй, я уже некоторое время искал и несколько раз пытался решить проблему с updateUI() ;. Я не могу заставить его работать, приложение продолжает сбой при запуске. Код размещенandroid app crashing: отправленный код

"Не удалось запустить Активность в _ __ _ __ _ ___ ___ java.lang.NullPointerException"

public class MainActivity extends SherlockFragmentActivity { 

private TextView txtStatus; 
private ImageView imageView; 
int i=0; 
int imgid[]={R.drawable.new_york_city_1,R.drawable.facebook,R.drawable.groupsms,R.drawable.twittersms }; 
RefreshHandler refreshHandler=new RefreshHandler(); 

class RefreshHandler extends Handler{ 
    @Override 
    public void handleMessage(Message msg) { 
     // TODO Auto-generated method stub 
     MainActivity.this.updateUI(); 
    } 
    public void sleep(long delayMillis){ 
     this.removeMessages(0); 
     sendMessageDelayed(obtainMessage(0), delayMillis); 
    } 
}; 
public void updateUI(){ 
    int currentInt=Integer.parseInt((String)txtStatus.getText())+10; 
    if(currentInt<=100){ 
     refreshHandler.sleep(2000); 
     txtStatus.setText(String.valueOf(currentInt)); 
     if(i<imgid.length){ 
      imageView.setImageResource(imgid[i]); 

      i++; 
     } 
    } 
}@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.drawer_main); 

    SpannableString s = new SpannableString("DJUICE"); 
    s.setSpan(new TypefaceSpan(this, "djuice"), 0, s.length(), 
      Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

    // Update the action bar title with the TypefaceSpan instance 
    ActionBar actionBar = getSupportActionBar(); 
    actionBar.setTitle(s); 

    this.txtStatus=(TextView)this.findViewById(R.id.textViewM); 
    this.imageView=(ImageView)this.findViewById(R.id.imageViewM); 
    updateUI(); 
} 

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingLeft="4dp" 
android:paddingRight="4dp" 
android:paddingTop="4dp" 
android:paddingBottom="4dp" 
android:background="#FFFFFF"> 

<TextView android:text="10" 
      android:id="@+id/textViewM" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"></TextView> 
<ImageView android:id="@+id/imageViewM" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" ></ImageView></RelativeLayout> 

Logcat:

E/AndroidRuntime(4898): FATAL EXCEPTION: main 
E/AndroidRuntime(4898): java.lang.RuntimeException: Unable to start activity 
ComponentInfo{runaway.fridge.potohar/runaway.fridge.potohar.MainActivity}: 
java.lang.NullPointerException 
E/AndroidRuntime(4898): at 
runaway.fridge.potohar.MainActivity.updateUI(MainActivity.java:59) 
E/AndroidRuntime(4898): at 
runaway.fridge.potohar.MainActivity.onCreate(MainActivity.java:85) 
+0

Пожалуйста, отправьте сообщение LogCat. –

+0

отредактирован ответ. – Aashir

+1

У вас должен быть оператор if для проверки, если «txtStatus.getText()» и/или «txtStatus.getText(). ToString()» имеет значение null, прежде чем пытаться его проанализировать. Всякий раз, когда вы работаете с входом, вы, вероятно, должны это сделать. – Kage

ответ

1

В догадка, вы вызываете updateUI(), который пытается сделать

Integer.parseInt((String)txtStatus.getText())+10;

перед значение помещается в поле. Это означает, что он ничего не пытается разобрать, и есть ваш NullPointer.

Чтобы проверить это, просто добавьте txtStatus.setText("10"); до updateUI() и посмотрите, не прекратите ли вы сбой.

Если это так, просто проверьте на null при получении этого входа, чтобы остановить сбой.

Кроме того, нет необходимости, чтобы бросить (String)txtStatus.getText() просто сделать txtStatus.getText().toString();

+0

есть способ, которым я могу решить ошибку? – Aashir

+0

@ user2558344 Просто позвоните updateUI(); только после того, как текст был помещен в поле. Попробуйте код в моем ответе, чтобы узнать, не остановит ли это сбой. – whitfin

+0

он не работал, ошибка остается неизменной – Aashir

0

Я думаю, может быть, вы хотите, чтобы это в updateUI()

int currentInt=Integer.parseInt(txtStatus.getText().toString())+10; 
+0

Это помогает, но это не причина NPE. – whitfin

0

Убедитесь, что вы добавили активность в манифесте. Обычно это может вызвать эту проблему,

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="your.package.name"> 

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

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".FirstActivity" android:label="@string/app_name"></activity> 
    <activity android:name=".SecondActivity"></activity> 
</application> 
</manifest> 
+0

Если мероприятие не было добавлено, 'logcat' прямо скажет вам добавить его. – whitfin