簡體   English   中英

Android AsyncTask,不將sharedpreference發送到套接字

[英]Android AsyncTask, doesn't send the sharedpreference to the socket

我已經搜索了整個站點,但是沒有找到問題的任何提示,當我在主活動中單擊按鈕時,我試圖通過套接字發送一些共享的首選項,並且共享的首選項保存在第二個活動中,套接字是在SocketEsp類中創建的是我的代碼:

主要活動:

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)

您正在使用以下構造函數:

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

沒有上下文參數。 當您執行此操作以獲取共享偏好時:

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

這導致了NPE。 您需要向每個構造函數添加context參數來解決此問題,並傳遞調用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM