2013-11-21 35 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(); 
    } 
     } 
    } 

最終目標是在激活的BT連接期間執行http事件。這是基於BluetoothChat示例的,如果有幫助的話。 我也有一個處理程序&定時任務運行來反覆執行BT消息 - 每分鐘不超過1個。

這裏的錯誤:

9月11日至21日:08:30.395:E/AndroidRuntime(5012):顯示java.lang.NullPointerException 9月11日至21日:08:30.395:E/AndroidRuntime(5012):在android.conference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:366) 11-Dec 09:08:30.395:E/AndroidRuntime(5012):android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:160) 11-21 09: 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):在android.os.Handler.dispatchMessage(Handler.java:99) 11-21 09:08:30.395:E/AndroidRuntime(5012):在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):at java.lang.reflect.Method.invokeNative(Native Method) 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(本機方法)

回答

0
HttpService sendNow = new HttpService(); 

// ... 

public class HttpService extends PreferenceActivity 

你不能用new實例活動(以及你可以但他們沒有被正確初始化)。通過Intent實例化活動,並在onCreate()或更高版本的生命週期中將其用作Context

在你的情況下,似乎HttpService應該不是一個活動。將有效的Context對象作爲參數傳遞給sendData(),並使用它代替this

+0

謝謝。我可以在第二項活動中調用該方法嗎?這是我所需要的。我只需要做Http Post,並且我不能從主要活動的任何地方 - 注意我的最終目標... – user2752652

+0

我將它製作成擴展AsyncTask的內部類。沒有偏好需要 - 效果很好。感謝您讓我回到正軌上... – user2752652