有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java服务丢失绑定(mBoundService=null)

我有一个工作版本,其中有一个片段将json字符串传递到主活动,该活动绑定了tcpsocket服务:

主要活动:

...

 private ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mBoundService = ((Socket_Service.LocalBinder) service).getService();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mBoundService = null;
            Log.d("TCP Client: Main_Activity", "onServiceDisconnected called!");
        }
    };

    ...
        public void writeByte(String jsonObject) {
            if (mBoundService != null) {
                mBoundService.sendMessage(jsonObject);
            }
        }
    ...

片段:

...
Main_Activity activity = (Main_Activity) getActivity();
        activity.writeByte(jsonObject.toString()); 
...

---------------------------------------------------------------------------------------------

我想创建一个单独的类(没有片段)来创建json字符串,并将其传递给Main_活动,后者将其传递给服务。我这样做了,但它不起作用,因为mBoundService获取值“null”,并且不能再向该服务传递任何内容

片段:

JSON pwmJASON = new JSON();
        pwmJASON.cratePWMJSON(PWM1,PWM2,PWM3,PWM4,PWM5,PWM6,PWM7);

JSON。类别:

package de.l.LED.control.background;

import 安卓.app.Fragment;
import 安卓.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import de.l.LED.control.Main_Activity;


public class JSON extends Main_Activity{

    public void cratePWMJSON(int PWM1, int PWM2, int PWM3, int PWM4, int PWM5, int PWM6, int PWM7){
        JSONObject jsonObject = new JSONObject();
        JSONArray jsonArray = new JSONArray();

        try {
            //jsonArray.put("");
            jsonArray.put(PWM1 * 64);
            jsonArray.put(PWM2 * 64);
            jsonArray.put(PWM3 * 64);
            jsonArray.put(PWM4 * 64);
            jsonArray.put(PWM5 * 64);
            jsonArray.put(PWM6 * 64);
            jsonArray.put(PWM7 * 64);
            jsonObject.put("PWMs", jsonArray); 
        } catch (JSONException e) {
            e.printStackTrace();
        }
        Log.d("JSO", "Received JSON String: " + jsonObject.toString());
        Main_Activity activity = new Main_Activity();
        activity.writeByte(jsonObject.toString());
    }

}

有什么想法吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    我建议使用以下方法:

    public class JsonHelper{
    
        public static String cratePWMJSON(int PWM1, int PWM2, int PWM3, int PWM4, int PWM5, int PWM6, int PWM7){
            JSONObject jsonObject = new JSONObject();
            JSONArray jsonArray = new JSONArray();
    
            try {
                //jsonArray.put("");
                jsonArray.put(PWM1 * 64);
                jsonArray.put(PWM2 * 64);
                jsonArray.put(PWM3 * 64);
                jsonArray.put(PWM4 * 64);
                jsonArray.put(PWM5 * 64);
                jsonArray.put(PWM6 * 64);
                jsonArray.put(PWM7 * 64);
                jsonObject.put("PWMs", jsonArray); 
            } catch (JSONException e) {
                e.printStackTrace();
            }
            Log.d("JSO", "Received JSON String: " + jsonObject.toString());
            return jsonObject.toString();
        }
    }
    

    然后在你的片段中,你可以这样称呼它:

    String pwmJsonAsString = JsonHelper().cratePWMJSON(PWM1,PWM2,PWM3,PWM4,PWM5,PWM6,PWM7);
    Main_Activity activity = (Main_Activity) getActivity();
    activity.writeByte(pwmJsonAsString);