2013-11-21 3 views
0

Моя цель - получить переменную restpost во втором классе, поэтому ее можно отправить через httppost. Существует уже используемый объект SharedPreferences, который предназначен для пользовательских настроек. Я искал это по меньшей мере 100 раз и проверял каждый соответствующий пост здесь.Проблема с SharedPreferences между классами, изнутри обработчика

Основной вид деятельности содержит следующее:

 private final Handler mHandler = new Handler() { 
    @SuppressWarnings("deprecation") 
    @Override 
    public void handleMessage(Message msg) { 
     switch (msg.what) { 
     case MESSAGE_STATE_CHANGE: 
      if(D) Log.i(TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1); 
      switch (msg.arg1) { 
      case BTService.STATE_CONNECTED: 
       setStatus(getString(R.string.title_connected_to,mConnectedDeviceName)); 
       mConversationArrayAdapter.clear(); 
       break; 
    ... //then...eventually this.. 

         Editor editor = sharedPrefs.edit(); 
       editor.putString("restpost", restpost); 
       editor.commit(); 
      HttpService sendNow = new HttpService(); 
      sendNow.sendData(); 

Второй класс ниже.

public class HttpService extends PreferenceActivity{ 


public void onCreate(Bundle savedInstanceState) { 
    // super.onCreate(savedInstanceState); 

} 

public void sendData(){ 

    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
    String host = sharedPrefs.getString("host_text", "NULL"); 
    String muser = sharedPrefs.getString("user_text", "NULL"); 
    String mpw = sharedPrefs.getString("pw_text", "NULL"); 
    String maxurl = sharedPrefs.getString("restpost", "NULL"); 

    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(maxurl); 
    HttpContext localContext = new BasicHttpContext(); 
    HttpResponse response; 
    try { 
     response = httpClient.execute(httpPost); 
     Log.d("Http Response:", response.toString()); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
     } 
    } 

Конечная цель - сделать http-событие во время активного соединения BT. Это основано на примере BluetoothChat, если это помогает. У меня также есть обработчик & приложенная задача для выполнения BT-сообщений несколько раз - не более 1 в минуту.

Вот ошибка:

11-21 09: 08: 30,395: E/AndroidRuntime (5012): java.lang.NullPointerException 11-21 09: 08: 30,395: E/AndroidRuntime (5012): at android.content.ContextWrapper.getSharedPreferences (ContextWrapper.java:160) 11-21 09: 08: 30.395: E/AndroidRuntime (5012): at android.preference.PreferenceManager.getDefaultSharedPreferences (PreferenceManager.java:366) 11- 21 09: 08: 30.395: E/AndroidRuntime (5012): at com.clicsys.motomon.HttpService.sendData (HttpService.java:29) 11-21 09: 08: 30.395: E/AndroidRuntime (5012): at com .clicsys.motomon.MainActivity $ 3.handleMessage (MainActivity.java:467) 11-21 0 9: 08: 30.395: E/AndroidRuntime (5012): at android.os.Handler.dispatchMessage (Handler.java:99) 11-21 09: 08: 30.395: E/AndroidRuntime (5012): at android.os. Looper.loop (Looper.java:137) 11-21 09: 08: 30.395: E/AndroidRuntime (5012): at android.app.ActivityThread.main (ActivityThread.java:4950) 11-21 09:08: 30.395: E/AndroidRuntime (5012): при java.lang.reflect.Method.invokeNative (собственный метод) 11-21 09: 08: 30.395: E/AndroidRuntime (5012): at java.lang.reflect.Method.invoke (Method.java:511) 11-21 09: 08: 30.395: E/AndroidRuntime (5012): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1004) 11-21 09 : 08: 30.395: E/AndroidRuntime (5012): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:771) 11-21 09: 08: 30.395: E/AndroidRuntime (5012): at dalvi k.system.NativeStart.main (Native Method)

ответ

0
HttpService sendNow = new HttpService(); 

// ... 

public class HttpService extends PreferenceActivity 

Вы не можете создать экземпляр деятельности с new (ну вы может, но они не инициализированы). Мгновентировать деятельность через Intent и использовать ее как Context в onCreate() или позже на жизненном цикле.

В вашем случае, похоже, HttpService не должно быть никакой деятельностью. Перейдите в действительный объект Context в качестве параметра в sendData() и используйте его вместо this.

+0

Спасибо. Могу ли я вызвать метод во втором действии? Это действительно все, что мне нужно. Мне просто нужно сделать Http Post, и я не могу нигде внутри основной деятельности - обратите внимание на мою конечную цель ... – user2752652

+0

Я создал его во внутренний класс, расширяющий AsyncTask. Никаких предпочтений не требуется - отлично работает. Спасибо, что вернул меня обратно ... – user2752652

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