无法从一个活动更改另一个活动中设置的int值

7fhtutme  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(228)

我正试图通过单击 ImageButton 在我的警报活动中,计数器位于server.java类(这是一个tcp服务器)中,但是当我试图通过在我的alert.java中设置来更改值时:

Server server;
    refreshing.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            server.count = 0;
            SharedPreferences prefs = getSharedPreferences("MY_DATA", MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.clear();
            editor.apply();
            Intent intent = getIntent();
            overridePendingTransition(0, 0);
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            finish();
            overridePendingTransition(0, 0);
            startActivity(intent);
        }
    });

错误导致崩溃: Java.lang.NullPointerException: Attempt to write to field 'int com.example.sguidetti.selfmanegment.Server.count' on a null object reference 当我在主活动中使用相同的操作通过单击另一个来重置相同的计数器时 ImageButton 这就行了。
(附言:我是android新手,所以我不懂很多东西)
这里编辑的是server.java

public class Server {
DataBaseHandler myDB;
allert Allert;
MainActivity activity;
RecyclerViewAdapter adapterView;
Adapter adapter;
ServerSocket serverSocket;
public static int count=0;
String letto = "";
private SharedPreferences prefs;
static final int socketServerPORT = 8080;

public Server(MainActivity activity) {
    this.activity = activity;
    Thread socketServerThread = new Thread(new SocketServerThread());
    socketServerThread.start();
}

public int getPort() {
    return socketServerPORT;
}

public void onDestroy() {
    if (serverSocket != null) try {
        serverSocket.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

private class SocketServerThread extends Thread {
    Vibrator vibrator;
    String date,ora;
    long[] pattern = {0, 1000, 500, 1000, 500, 1000};

    int lun;

    @Override
    public void run() {
        InputStream leggi;
        try {

            serverSocket = new ServerSocket(socketServerPORT);

            while (true) {
                myDB = DataBaseHandler.getInstance(activity);

                Socket socket = serverSocket.accept();
                leggi = socket.getInputStream();
                byte[] data = new byte[1000];
                lun = leggi.read(data, 0, data.length);
                letto = new String(data, "UTF-8");
                count++;
                MediaPlayer mPlay = MediaPlayer.create(activity, R.raw.gabsuono);
                mPlay.start();

                vibrator = (Vibrator) activity.getSystemService(VIBRATOR_SERVICE);
                vibrator.vibrate(pattern, -1);

                date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
                ora = new SimpleDateFormat("HH:mm:ss").format(new Date());
                myDB.insertDataServer(date, ora, letto);

                //adapterView.notifyDataSetChanged();

                activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        prefs = activity.getSharedPreferences("MY_DATA", MODE_PRIVATE);
                        SharedPreferences.Editor edit = prefs.edit();
                        edit.putInt("counter", count);
                        edit.commit();
                        activity.msg.setText(String.valueOf(count));
                        activity.msg.setVisibility(View.VISIBLE);

                    }
                });
                leggi.close();

            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }

    }

}

public void Parti() {
    prefs = activity.getSharedPreferences("MY_DATA", MODE_PRIVATE);
    count = prefs.getInt("counter", count);
    activity.msg.setText("" + count);
    if (count == 0)
        activity.msg.setVisibility(View.INVISIBLE);
    else
        activity.msg.setVisibility(View.VISIBLE);

}

}
kqlmhetl

kqlmhetl1#

你忘了初始化你的 server 对象,添加:

Server server = new Server();
hi3rlvi2

hi3rlvi22#

你需要使int为静态

public static final int count = 0;

然后您可以从另一个类似这样的活动中访问该值

Server.count = 5;

更新
像这样在服务器中声明您的计数

public static final String COUNT = "count";

同时声明

public static final String PREFS = "prefs";

像这样宣布你的共享优先权

SharedPreferences prefs = getSharedPreferences(Server.PREFS, MODE_PRIVATE);
 SharedPreferences.Editor editor = prefs.edit();

然后在你的按钮点击后,你已经调用了你的SharedReference

editor.putInt(Server.COUNT,5).commit();

然后在警报活动中获取int值,如下所示

int count = prefs.getInt(Server.COUNT,0);

相关问题