2012-01-04 3 views
0

Это очень простая задача, которую я ожидаю разобраться, и только я, будучи новичком, крутится по кругу.NullPointerException - onPause()

У меня есть несколько вкладок на моем экране. Следующий код должен читать текстовый ввод и присваивать его значение Shared Preferences при выборе другой вкладки. Тем не менее, всякий раз, когда я перехожу на другую вкладку, мой код выходит из строя с помощью NullPointerException - я считаю, что я отследил его до onPause() приведенного ниже кода, и я считаю, что это связано с тем, что я не могу правильно передать данные внутри переменной.

Любые указатели оценили!

package com.androidbook.epcsn; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.IOException; 

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

@SuppressWarnings("unused") 
public class jobActivity extends Activity { 

public static final String SN_PREFERENCES = "SiteNotePrefs"; 

SharedPreferences mPrefSettings; 
String jobID; 
String jobAddress ; 
String jobPostcode ; 

public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.joblayout); 

    final SharedPreferences mPrefSettings = getSharedPreferences (SN_PREFERENCES, Context.MODE_WORLD_WRITEABLE); 

    initjobID(); 
    initjobaddress(); 
    initjobpostcode(); 
} 

private void initjobpostcode() { 
    EditText jobPostcode = (EditText)findViewById(R.id.jobPostcodeText); 
} 

private void initjobaddress() { 
    EditText jobAddress = (EditText)findViewById(R.id.jobAddressText); 
} 

private void initjobID() { 
    EditText jobID = (EditText)findViewById(R.id.jobIDText); 
} 

@Override 
protected void onPause(){ 
    super.onPause(); 

    String strjobID = jobID; 
    String strjobAddress = jobAddress; 
    String strjobPostcode = jobPostcode; 

    Editor editor = mPrefSettings.edit(); 
    editor.putString("jobID", strjobID); 
    editor.putString("jobAddress", strjobAddress); 
    editor.putString("jobPostcode", strjobPostcode); 
    editor.commit(); 
} 
} 
+2

Просьба представить фактическую ошибку (StackTrace). На нем должны быть указаны простыни, так что также сообщите нам, какая линия относится к указанному линейному номеру – Nanne

+0

Можете ли вы показать нам logtcat? и что именно? –

ответ

4

Вы можете установить значения в локальных переменных в init методах, а не свойства класса, как задумано, например .:

EditText jobID; 

// Then later... it's clobberin' time. 
private void initjobID() { 
    EditText jobID = (EditText)findViewById(R.id.jobIDText); 
} 

Свойство jobID является shadowed местным jobID заявленного в методе.

(соглашения на уровне Java назовут метод initJobId, а также имущество jobId).

Чтобы задать свойства экземпляра в методах инициализации, удалить локальные объявления и использовать этот шаблон:

EditText jobID; 
private void initjobID() { 
    jobID = (EditText)findViewById(R.id.jobIDText); 
} 
+0

спасибо - Мне очень многое нужно узнать! – CornishDibley

+0

@CornishDibley Как и все мы :) –

0

Я полагаю, это потому, что вы устанавливаете

final SharedPreferences mPrefSettings = getSharedPreferences (SN_PREFERENCES, Context.MODE_WORLD_WRITEABLE); 

Для локальной переменной вместо в поле члена класса.

Поэтому исключение, вероятно, по адресу:

mPrefSettings.edit(); 

Потому что он по-прежнему пусто (не установлено в методе init).

Попробуйте изменить его на:

mPrefSettings = getSharedPreferences (SN_PREFERENCES, Context.MODE_WORLD_WRITEABLE); 

быть также осторожными с другими методами, например, инициализации initjobID, как они делают ту же самую ошибку.

Изменить класс:

package com.androidbook.epcsn; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.IOException; 

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

@SuppressWarnings("unused") 
public class jobActivity extends Activity { 

public static final String SN_PREFERENCES = "SiteNotePrefs"; 

SharedPreferences mPrefSettings; 
String jobID; 
String jobAddress ; 
String jobPostcode ; 

public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.joblayout); 

    mPrefSettings = getSharedPreferences (SN_PREFERENCES, Context.MODE_WORLD_WRITEABLE); 

    initjobID(); 
    initjobaddress(); 
    initjobpostcode(); 
} 

private void initjobpostcode() { 
    jobPostcode = (EditText)findViewById(R.id.jobPostcodeText); 
} 

private void initjobaddress() { 
    jobAddress = (EditText)findViewById(R.id.jobAddressText); 
} 

private void initjobID() { 
    jobID = (EditText)findViewById(R.id.jobIDText); 
} 

@Override 
protected void onPause(){ 
    super.onPause(); 

    String strjobID = jobID; 
    String strjobAddress = jobAddress; 
    String strjobPostcode = jobPostcode; 

    Editor editor = mPrefSettings.edit(); 
    editor.putString("jobID", strjobID); 
    editor.putString("jobAddress", strjobAddress); 
    editor.putString("jobPostcode", strjobPostcode); 
    editor.commit(); 
} 
} 
0

переменные, заданные во время onCreate() не являются такими же, как вы объявили на уровне класса. Это действительно основное непонимание того, как объявлять и изменять содержимое переменной в Java. См. Следующую ссылку, возможно, это поможет вам понять.

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html

Смежные вопросы