服务丢失绑定(mBoundService = null)

时间:2014-11-19 14:19:13

标签: java android json android-fragments service

我有一个带有Fragment pasing json字符串的工作版本到主活动,它有一个绑定到它的tcp套接字服务:

Main_Activity:

...

 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_Activity,并将其传递给服务。我做到了,但它没有工作,因为mBoundService获取值" null"并且不能再将任何东西传递给服务了。

片段:

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

JSON.class:

package de.l.LED.control.background;

import android.app.Fragment;
import android.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 个答案:

答案 0 :(得分:0)

我建议使用这个:

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);