将数据从服务发送到碎片,Android
晚上好<我在服务方面有点小问题。首先,我有几个文本视图片段。在这些文本视图中,我想从我的服务中输入文本。这是我简单服务的代码将数据从服务发送到碎片,Android,android,android-fragments,service,android-service,Android,Android Fragments,Service,Android Service,晚上好
public class ChallengeService extends Service {
final String LOG_TAG = "myLogs";
private String url = "";
public static ArrayList<Exercises> exercises = new ArrayList<>();
public void onCreate() {
super.onCreate();
Log.d(LOG_TAG, "onCreate");
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(LOG_TAG, "onStartCommand");
url = intent.getStringExtra("Challenge_URL");
new getChallenge(url).execute();
return super.onStartCommand(intent, flags, startId);
}
public void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "onDestroy");
}
public IBinder onBind(Intent intent) {
Log.d(LOG_TAG, "onBind");
return null;
}
public class getChallenge extends AsyncTask<Void,Void,String> {
String mUrl;
OkHttpClient client = new OkHttpClient();
String result = "";
public getChallenge(String url) {
this.mUrl = url;
}
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
@Override
protected String doInBackground(Void... params) {
Log.d("Background", "inBackground");
try {
URL mUrl = new URL(url);
Log.d("URL!!!!", "url = " + url);
urlConnection = (HttpURLConnection) mUrl.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
result = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String strJson) {
super.onPostExecute(strJson);
Log.d(LOG_TAG, strJson + " " + url);
exercises = ParseJSON.ChallengeParseJSON(strJson);
Log.d("Challenges", "challenges: " + exercises.get(0).getName() + " " + exercises.get(1).getName());
}
}
}
公共类ChallengeService扩展服务{
最终字符串日志\u TAG=“myLogs”;
私有字符串url=“”;
公共静态ArrayList练习=新建ArrayList();
public void onCreate(){
super.onCreate();
Log.d(Log_标签,“onCreate”);
}
公共int onStartCommand(Intent Intent、int标志、int startId){
Log.d(Log_标签,“onStartCommand”);
url=intent.getStringExtra(“挑战url”);
新建getChallenge(url).execute();
返回super.onStartCommand(intent、flags、startId);
}
公共空间{
super.ondestory();
Log.d(Log_标签“onDestroy”);
}
公共IBinder onBind(意向){
Log.d(Log_标签,“onBind”);
返回null;
}
公共类getChallenge扩展异步任务{
弦乐;
OkHttpClient=新的OkHttpClient();
字符串结果=”;
公共getChallenge(字符串url){
this.mUrl=url;
}
HttpURLConnection-urlConnection=null;
BufferedReader reader=null;
@凌驾
受保护字符串doInBackground(无效…参数){
日志d(“背景”、“背景”);
试一试{
URL mUrl=新URL(URL);
Log.d(“URL!!!!”,“URL=“+URL”);
urlConnection=(HttpURLConnection)mUrl.openConnection();
urlConnection.setRequestMethod(“GET”);
urlConnection.connect();
InputStream InputStream=urlConnection.getInputStream();
StringBuffer=新的StringBuffer();
reader=新的BufferedReader(新的InputStreamReader(inputStream));
弦线;
而((line=reader.readLine())!=null){
buffer.append(行);
}
结果=buffer.toString();
}捕获(例外e){
e、 printStackTrace();
}
返回结果;
}
@凌驾
受保护的void onPostExecute(字符串strJson){
super.onPostExecute(strJson);
Log.d(Log_标记,strJson+“”+url);
exercises=ParseJSON.ChallengeParseJSON(strJson);
Log.d(“挑战”,“挑战:+练习.获取(0).getName()+”“+练习.获取(1).getName());
}
}
}
我需要将练习列表发送给我的片段,我如何制作?
我是服务新手,我不知道,请帮助我,你可以用两种方法
只需广播服务的结果,并通过广播接收器在片段中接收它 例如,您可以像这样在
onPostExecute
中广播您的练习
@Override
protected void onPostExecute(String strJson) {
super.onPostExecute(strJson);
Log.d(LOG_TAG, strJson + " " + url);
exercises = ParseJSON.ChallengeParseJSON(strJson);
Log.d("Challenges", "challenges: " + exercises.get(0).getName() + " " + exercises.get(1).getName());
Intent intent = new Intent(FILTER); //FILTER is a string to identify this intent
intent.putExtra(MY_KEY, exercises);
sendBroadcast(intent);
}
然而,你的锻炼对象需要是这样才能顺利进行。或者您可以广播原始json字符串并调用ParseJSON.ChallengeParseJSON(strJson)代码>在片段中
然后在片段中创建一个接收器
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ArrayList<Exercises> exercises = intent.getExtras().get(MY_KEY);
//or
//exercises = ParseJSON.ChallengeParseJSON(intent.getStringExtra(MY_KEY));
}
};
您还需要使用getActivity(),在onPause中注销它代码>
如果您有兴趣,也可以阅读更多有关它的内容您对如何持续进行此操作有何想法?在我的应用程序中,每次值发生变化时都需要接收数据。这是将数据从服务发送到片段的最佳方式吗?还有别的办法吗?你能提供证明你的答案的文件吗。谢谢
@Override
protected void onResume() {
super.onResume();
getActivity().registerReceiver(receiver, new IntentFilter(FILTER));
}