Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取用户联机/脱机状态_Java_Android_Arrays_Json - Fatal编程技术网

Java 获取用户联机/脱机状态

Java 获取用户联机/脱机状态,java,android,arrays,json,Java,Android,Arrays,Json,我有一个聊天应用程序,我需要开发用户在线状态,为此,我在服务器上每隔15秒调用一次API,它将返回所有登录用户及其0(离线)和1(在线)的在线状态 我需要在聊天时显示用户是在线还是离线(保持应用程序未注销)。我有一个数组列表,显示应用程序何时启动,所有登录的用户id及其详细信息,包括其在线状态,我创建了第二个API,该API以JSON返回用户在线状态。我有以下选项来实现用户在线状态 替换现有数组列表项:-我正在获取JSON中的用户ID及其联机状态,但我需要每隔15秒运行一次循环,以替换现有ar

我有一个聊天应用程序,我需要开发用户在线状态,为此,我在服务器上每隔15秒调用一次API,它将返回所有登录用户及其0(离线)和1(在线)的在线状态

我需要在聊天时显示用户是在线还是离线(保持应用程序未注销)。我有一个数组列表,显示应用程序何时启动,所有登录的用户id及其详细信息,包括其在线状态,我创建了第二个API,该API以JSON返回用户在线状态。我有以下选项来实现用户在线状态

  • 替换现有数组列表项:-我正在获取JSON中的用户ID及其联机状态,但我需要每隔15秒运行一次循环,以替换现有arraylist中的值
  • 将JSON存储在我可以轻松找到用户id及其状态的地方:-如果我将JSON存储在数组列表中,我需要运行循环来查找我不想查找的id及其状态,所以哪种是存储JSON的最佳方式,这样我就可以通过其用户id轻松获得用户状态
下面是我如何得到JSON的

protected List<WrapperClass> doInBackground(Void... params) {
        userSession=new UserSession(context,"Elaxer");
        UserState_Update=new ArrayList<>();


            String data = null;
            try {
                String ID=userSession.getUserID(); //Getting Value from shared pref
                data = URLEncoder.encode("User_ID", "UTF-8") + "=" + URLEncoder.encode(ID, "UTF-8");
                Log.d(TAG,"Login ID "+ ID);
                Log.d(TAG,"DO IN BACKGROUND START ");
                URL url=new URL(URL_Path_NearBy);
                connection= (HttpURLConnection) url.openConnection();
                Log.d(TAG,connection.toString());
                connection.setRequestMethod("POST");
                connection.setDoInput(true);
                connection.setDoOutput(true);

                //For POST Only - Begin
                OutputStream os = connection.getOutputStream();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
                writer.write(data);
                writer.flush();
                writer.close();
                os.close();
                connection.connect();

                InputStream inputStream=connection.getInputStream();
                reader=new BufferedReader(new InputStreamReader(inputStream));
                Log.d(TAG,"GET INPUT STREAM AND PUUTING INTO READER");
                String line;
                StringBuffer stringBuffer=new StringBuffer();
                while ((line=reader.readLine())!=null){
                    stringBuffer.append(line);

                }
                String completeJSON=stringBuffer.toString();
                Log.d(TAG,"JSON ARRAY START");

                JSONObject parentArray=new JSONObject(completeJSON);
                JSONArray jsonArray=parentArray.getJSONArray("uData");


                String LastSeen;
                int LoginStatus,User_ID;
                int Rec_Online_Status;

                for (int i = 0; i <jsonArray.length() ; i++) {
                    JSONObject childObject=jsonArray.getJSONObject(i);

                    LastSeen=childObject.getString("lastseen") ;
                    LoginStatus=childObject.getInt("login_status") ;
                    User_ID=childObject.getInt("User_ID");
                    String UseID= String.valueOf(User_ID);
                    Log.d(TAG,"JSON Values "+LastSeen+" "+LoginStatus+" "+User_ID);

                    WrapperClass wrapperClass=new WrapperClass(UseID,LoginStatus);
                    UserState_Update.add(wrapperClass);
                }

                return UserState_Update; //List<WrapperClass> UserState_Update

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ProtocolException e) {
                e.printStackTrace();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }




        return null;
    }
这是获取用户联机状态的正确方法吗?(我知道FCM是正确的方式,但FCM目前尚未在应用服务器端就绪)

更新2:-作为@XngPro推荐的代码,我在
doinBackground上实施

Map<String,Online_Status_Wrapper.User> map=new HashMap<>();
    Online_Status_Wrapper wrapper=gson.fromJson(completeJSON,Online_Status_Wrapper.class);
                        Log.d(TAG,"Wrapper Get Data value "+wrapper.getuData());
                        Log.d(TAG,"Wrapper Get Status value "+wrapper.getStatus());

                        for (Online_Status_Wrapper.User u: wrapper.getuData()){
                            map.put(u.getUser_ID(),u);
                        }


                        Log.d(TAG,"State of Other User users "+map.get(12).getLogin_status());//HERE I AM GETTING NullPointerException
                        return map;
Map Map=newhashmap();
Online_Status_Wrapper=gson.fromJson(completeJSON,Online_Status_Wrapper.class);
d(标记“Wrapper Get Data value”+Wrapper.getuData());
Log.d(标记“Wrapper Get Status value”+Wrapper.getStatus());
对于(联机\u状态\u Wrapper.User u:Wrapper.getuData()){
map.put(u.getUser_ID(),u);
}
Log.d(标记“其他用户的状态”+map.get(12.getLogin_status())//这里我得到了NullPointerException
返回图;

我认为您应该使用Java序列化/反序列化库,如

希望能帮助你~

示例

private static void bar() {
    String jsonStr = "{\"status\":\"SUCCESS\",\"uData\":[{\"User_ID\":\"4\",\"login_status\":\"1\",\"lastseen\":\"0000-00-00 00:00:00\"},{\"User_ID\":\"1\",\"login_status\":\"0\",\"lastseen\":\"0000-00-00 00:00:00\"},{\"User_ID\":\"12\",\"login_status\":\"1\",\"lastseen\":\"0000-00-00 00:00:00\"},{\"User_ID\":\"33\",\"login_status\":\"0\",\"lastseen\":\"0000-00-00 00:00:00\"}]}";
    Gson gson = new Gson();
    UserFoo userFoo = gson.fromJson(jsonStr, UserFoo.class);
    Map<String, UserFoo.User> map = new HashMap<>();
    for (UserFoo.User u : userFoo.getUData()) {
        map.put(u.getUser_ID(), u);
    }
    System.out.println("userId: 12, loginState: " + map.get("12").getLogin_status());
}

public static class UserFoo {

    /**
     * status : SUCCESS
     * uData : [{"User_ID":"4","login_status":"1","lastseen":"0000-00-00 00:00:00"},{"User_ID":"1","login_status":"0","lastseen":"0000-00-00 00:00:00"},{"User_ID":"12","login_status":"1","lastseen":"0000-00-00 00:00:00"},{"User_ID":"33","login_status":"0","lastseen":"0000-00-00 00:00:00"}]
     */

    private String status;
    private List<User> uData;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public List<User> getUData() {
        return uData;
    }

    public void setUData(List<User> uData) {
        this.uData = uData;
    }

    public static class User {
        /**
         * User_ID : 4
         * login_status : 1
         * lastseen : 0000-00-00 00:00:00
         */

        private String User_ID;
        private String login_status;
        private String lastseen;

        public String getUser_ID() {
            return User_ID;
        }

        public void setUser_ID(String User_ID) {
            this.User_ID = User_ID;
        }

        public String getLogin_status() {
            return login_status;
        }

        public void setLogin_status(String login_status) {
            this.login_status = login_status;
        }

        public String getLastseen() {
            return lastseen;
        }

        public void setLastseen(String lastseen) {
            this.lastseen = lastseen;
        }
    }
}
private静态无效条(){
目前,除了“4”以外,还有“4”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”登录“U”的状态”的除了除了除了除了除了“1”以外,除了除了“1”以外,除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了以外以外以外以外以外以外以外以外,以外以外以外以外,还有除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了“用户ID\”:“33\”,“登录状态\”:“0\”,“上次查看”\":\"0000-00-00 00:00:00\"}]}";
Gson Gson=新的Gson();
UserFoo UserFoo=gson.fromJson(jsonStr,UserFoo.class);
Map Map=newhashmap();
for(UserFoo.User u:UserFoo.getUData()){
map.put(u.getUser_ID(),u);
}
System.out.println(“userId:12,loginState:+map.get(“12”).getLogin_status());
}
公共静态类UserFoo{
/**
*状态:成功
*uData:[{“用户ID”:“4”,“登录状态”:“1”,“上次查看”:“0000-00-00:00:00”},{“用户ID”:“1”,“登录状态”:“0”,“上次查看”:“0000-00-00:00:00”},{“用户ID”:“12”,“登录状态”:“1”,“上次查看”:“0000-00-00-00:00”},{“用户ID”:“33”,“登录状态”:“0”,“上次查看”:“0000-00-00:00:00”}]
*/
私有字符串状态;
私有列表uData;
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共列表getUData(){
返回uData;
}
公共无效setUData(列表uData){
this.uData=uData;
}
公共静态类用户{
/**
*用户ID:4
*登录状态:1
*最近看到的:0000-00-00:00:00
*/
私有字符串用户标识;
私有字符串登录状态;
私人字符串最近出现;
公共字符串getUser_ID(){
返回用户ID;
}
public void setUser\u ID(字符串User\u ID){
this.User\u ID=User\u ID;
}
公共字符串getLogin_status(){
返回登录状态;
}
公共无效设置登录状态(字符串登录状态){
this.login\u status=登录\u status;
}
公共字符串getLastseen(){
返回上次看到的;
}
公共void setLastseen(字符串lastseen){
this.lastseen=lastseen;
}
}
}
公共类测试{
公共静态void main(字符串[]args){
bar();
}
私有静态无效条(){
目前,除了“4”以外,还有“4”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”登录“U”的状态”的除了除了除了除了除了“1”以外,除了除了“1”以外,除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了以外以外以外以外以外以外以外以外,以外以外以外以外,还有除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了“用户ID\”:“33\”,“登录状态\”:“0\”,“上次查看”:\"0000-00-00 00:00:00\"}]}";
Gson Gson=新的Gson();
UserFoo UserFoo=gson.fromJson(jsonStr,UserFoo.class);
Map Map=newhashmap();
for(UserFoo.User u:UserFoo.getUData()){
map.put(u.getUser_ID(),u);
}
System.out.println(“userId:”+“12,loginState:”+map.get(“12”).getLogin_status());
}
公共静态类UserFoo{
/**
*状态:成功
*uData:[{“用户ID”:“4”,“登录状态”:“1”,“上次查看”:“0000-00-00:00:00”},{“用户ID”:“1”,“登录状态”:“0”,“上次查看”:“0000-00-00:00:00”},{“用户ID”:“12”,“登录状态”:“1”,“上次查看”:“0000-00-00-00:00”},{“用户ID”:“33”,“登录状态”:“0”,“上次查看”:“0000-00-00:00:00”}]
*/
私有字符串状态;
私有列表uData;
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共列表getUData(){
返回uData;
}
公共无效setUData(列表uData){
this.uData=uData;
}
公共静态类用户{
/**
*用户ID:4
*登录状态:1
private static void bar() {
    String jsonStr = "{\"status\":\"SUCCESS\",\"uData\":[{\"User_ID\":\"4\",\"login_status\":\"1\",\"lastseen\":\"0000-00-00 00:00:00\"},{\"User_ID\":\"1\",\"login_status\":\"0\",\"lastseen\":\"0000-00-00 00:00:00\"},{\"User_ID\":\"12\",\"login_status\":\"1\",\"lastseen\":\"0000-00-00 00:00:00\"},{\"User_ID\":\"33\",\"login_status\":\"0\",\"lastseen\":\"0000-00-00 00:00:00\"}]}";
    Gson gson = new Gson();
    UserFoo userFoo = gson.fromJson(jsonStr, UserFoo.class);
    Map<String, UserFoo.User> map = new HashMap<>();
    for (UserFoo.User u : userFoo.getUData()) {
        map.put(u.getUser_ID(), u);
    }
    System.out.println("userId: 12, loginState: " + map.get("12").getLogin_status());
}

public static class UserFoo {

    /**
     * status : SUCCESS
     * uData : [{"User_ID":"4","login_status":"1","lastseen":"0000-00-00 00:00:00"},{"User_ID":"1","login_status":"0","lastseen":"0000-00-00 00:00:00"},{"User_ID":"12","login_status":"1","lastseen":"0000-00-00 00:00:00"},{"User_ID":"33","login_status":"0","lastseen":"0000-00-00 00:00:00"}]
     */

    private String status;
    private List<User> uData;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public List<User> getUData() {
        return uData;
    }

    public void setUData(List<User> uData) {
        this.uData = uData;
    }

    public static class User {
        /**
         * User_ID : 4
         * login_status : 1
         * lastseen : 0000-00-00 00:00:00
         */

        private String User_ID;
        private String login_status;
        private String lastseen;

        public String getUser_ID() {
            return User_ID;
        }

        public void setUser_ID(String User_ID) {
            this.User_ID = User_ID;
        }

        public String getLogin_status() {
            return login_status;
        }

        public void setLogin_status(String login_status) {
            this.login_status = login_status;
        }

        public String getLastseen() {
            return lastseen;
        }

        public void setLastseen(String lastseen) {
            this.lastseen = lastseen;
        }
    }
}
public class Test {

    public static void main(String[] args) {
        bar();
    }

    private static void bar() {
        String jsonStr = "{\"status\":\"SUCCESS\",\"uData\":[{\"User_ID\":\"4\",\"login_status\":\"1\",\"lastseen\":\"0000-00-00 00:00:00\"},{\"User_ID\":\"1\",\"login_status\":\"0\",\"lastseen\":\"0000-00-00 00:00:00\"},{\"User_ID\":\"12\",\"login_status\":\"1\",\"lastseen\":\"0000-00-00 00:00:00\"},{\"User_ID\":\"33\",\"login_status\":\"0\",\"lastseen\":\"0000-00-00 00:00:00\"}]}";
        Gson gson = new Gson();
        UserFoo userFoo = gson.fromJson(jsonStr, UserFoo.class);
        Map<String, UserFoo.User> map = new HashMap<>();
        for (UserFoo.User u : userFoo.getUData()) {
            map.put(u.getUser_ID(), u);
        }
        System.out.println("userId: " + "12, loginState: " + map.get("12").getLogin_status());
    }

    public static class UserFoo {

        /**
         * status : SUCCESS
         * uData : [{"User_ID":"4","login_status":"1","lastseen":"0000-00-00 00:00:00"},{"User_ID":"1","login_status":"0","lastseen":"0000-00-00 00:00:00"},{"User_ID":"12","login_status":"1","lastseen":"0000-00-00 00:00:00"},{"User_ID":"33","login_status":"0","lastseen":"0000-00-00 00:00:00"}]
         */

        private String status;
        private List<User> uData;

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }

        public List<User> getUData() {
            return uData;
        }

        public void setUData(List<User> uData) {
            this.uData = uData;
        }

        public static class User {
            /**
             * User_ID : 4
             * login_status : 1
             * lastseen : 0000-00-00 00:00:00
             */

            private String User_ID;
            private String login_status;
            private String lastseen;

            public String getUser_ID() {
                return User_ID;
            }

            public void setUser_ID(String User_ID) {
                this.User_ID = User_ID;
            }

            public String getLogin_status() {
                return login_status;
            }

            public void setLogin_status(String login_status) {
                this.login_status = login_status;
            }

            public String getLastseen() {
                return lastseen;
            }

            public void setLastseen(String lastseen) {
                this.lastseen = lastseen;
            }
        }
    }

}