2016-05-03 4 views
0

サイト全体を検索しましたが、私の問題のヒントが見つかりませんでした。私は、メインアクティビティのボタンを押すとソケット経由でsharedpreferencesを送信しようとしています。 sharedpreferencesはソケットがここSocketEspクラスで作成された第二の活動に保存されている私のコードです:Android AsyncTaskは、ソケットにsharedpreferenceを送信しません。

MainActivity:

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.net.NetworkInfo; 
import android.net.wifi.WifiConfiguration; 
import android.net.wifi.WifiInfo; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import java.net.Socket; 

public class MainActivity extends AppCompatActivity { 

    Button butact, butoption, butdoor; 
    Intent intent; 
    SharedPreferences sharedPreferences; 
    private static Socket socket; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     intent = new Intent(this, SecondActivity.class); 
     butact = (Button)findViewById(R.id.butAct); 
     butdoor = (Button)findViewById(R.id.doorbut); 
     butoption = (Button)findViewById(R.id.optbut); 
     sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE); 
     butoption.setOnClickListener(option); 
     butact.setOnClickListener(fire); 
     //checkConnect(); 

    } 


    private void checkConnect(){ 
     String strSavedMem1 = sharedPreferences.getString("MEM1", ""); 
     String strSavedMem2 = sharedPreferences.getString("MEM2", ""); 
     String strSavedMem3 = sharedPreferences.getString("MEM3", ""); 

     if(strSavedMem1.isEmpty() | strSavedMem2.isEmpty() | strSavedMem3.isEmpty()) 
     { 
      startActivityForResult(intent, 1); 
     } 
     else{ 
      wifiConnect(); 
      } 
     } 

    public void wifiConnect(){ 
     String strSavedMem1 = sharedPreferences.getString("MEM1", ""); 
     String strSavedMem2 = sharedPreferences.getString("MEM2", ""); 
     WifiManager wifiManager = (WifiManager) MainActivity.this.getSystemService(Context.WIFI_SERVICE); 
     WifiConfiguration config = new WifiConfiguration(); 
     config.status = WifiConfiguration.Status.ENABLED; 
     config.SSID = "\"" + strSavedMem1 + "\""; 
     config.preSharedKey = "\""+ strSavedMem2 +"\""; 
     wifiManager.setWifiEnabled(true); 
     int networkId = wifiManager.addNetwork(config); 
     wifiManager.enableNetwork(networkId, true); 
    } 

    Button.OnClickListener option = new Button.OnClickListener(){ 

     @Override 
     public void onClick(View arg0) { 
      startActivity(intent); 
     } 
    }; 

    Button.OnClickListener fire = new Button.OnClickListener(){ 

     @Override 
     public void onClick(View arg0) 
     { 
      new SocketEsp("10.1.1.105",6000).execute(); 
     } 
    }; 

    private void checkSsid() 
    { 
     String strSavedMem1 = sharedPreferences.getString("MEM1", ""); 
     WifiManager wifiManager = (WifiManager) MainActivity.this.getSystemService(Context.WIFI_SERVICE); 
     WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
     if (WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()) == NetworkInfo.DetailedState.CONNECTED) { 
      String ssid = wifiInfo.getSSID(); 
      if (!ssid.equals(strSavedMem1)) 
      { 
       wifiConnect(); 
      } 
     } 
    } 

} 

EspSocketクラス:

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.Socket; 

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences; 
import android.os.AsyncTask; 
import android.preference.PreferenceManager; 

public class SocketEsp extends AsyncTask<Void, Void, Void> { 

    Context context; 
    private static Socket socket; 
    String dstAddress; 
    int dstPort; 

    public SocketEsp(Context context) { 
     this.context = context; 
    } 




    SocketEsp(String addr, int port) { 
     dstAddress = addr; 
     dstPort = port; 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) 
    { 


     try 
     { 
      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.context); 
      String strSavedMem3 = prefs.getString("MEM3", ""); 

      socket = new Socket(dstAddress, dstPort); 



      //Send the message to the server 
      OutputStream os = socket.getOutputStream(); 
      OutputStreamWriter osw = new OutputStreamWriter(os); 
      BufferedWriter bw = new BufferedWriter(osw); 


      String sendMessage2 = strSavedMem3 + "\n"; 
      bw.write(sendMessage2); 
      bw.flush(); 

      /*Get the return message from the server 
      InputStream is = socket.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(is); 
      BufferedReader br = new BufferedReader(isr); 
      String message = br.readLine(); 
      System.out.println("Message received from the server : " +message);*/ 
     } 
     catch (Exception exception) 
     { 
      exception.printStackTrace(); 
     } 
     finally 
     { 
      //Closing the socket 
      try 
      { 
       socket.close(); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
     return null; 



    } 

} 

しかし、私は何かを送信することはできません:あなたはこの次のコンストラクタを使用している

05-03 23:10:55.070 22368-22514/com.app.foxcorp.dcontrol W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
05-03 23:10:55.071 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:375) 
05-03 23:10:55.071 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:370) 
05-03 23:10:55.071 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at com.app.foxcorp.dcontrol.SocketEsp$override.doInBackground(SocketEsp.java:44) 
05-03 23:10:55.071 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at com.app.foxcorp.dcontrol.SocketEsp$override.access$dispatch(SocketEsp.java) 
05-03 23:10:55.071 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at com.app.foxcorp.dcontrol.SocketEsp.doInBackground(SocketEsp.java:0) 
05-03 23:10:55.071 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at com.app.foxcorp.dcontrol.SocketEsp.doInBackground(SocketEsp.java:18) 
05-03 23:10:55.071 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:295) 
05-03 23:10:55.071 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
05-03 23:10:55.071 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
05-03 23:10:55.075 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
05-03 23:10:55.075 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
05-03 23:10:55.076 22368-22514/com.app.foxcorp.dcontrol W/System.err:  at java.lang.Thread.run(Thread.java:818) 

答えて

0

:なしコンテキストパラメータを持っていない

SocketEsp(String addr, int port) { 
    dstAddress = addr; 
    dstPort = port; 
} 

を。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.context); 

これはNPEの原因となっています。これを修正するには、各コンストラクターにコンテキストパラメーターを追加し、呼び出すActivitiyのコンテキストを渡す必要があります。

new SocketEsp(MainActivity.this, "10.1.1.105",6000).execute(); 

SocketEsp(Context context, String addr, int port) { 
    this.context = context; 
    dstAddress = addr; 
    dstPort = port; 
} 
+0

本当にありがとうございました。私は本当に立ち往生した。 –

+0

問題ありません!時にはそれはちょうど目の第二のセットを取る –

関連する問題