【发布时间】:2018-04-14 04:38:03
【问题描述】:
我有以下代码,它可以在活动中正常工作。 但是我们如何在服务内部使用它呢?
该服务在后台运行,每当用户复制任何文本时,它都会触发 onPrimaryClipChanged(),并发出 HTTP Get 请求以将此数据发送到服务器。然后我们处理结果并根据结果显示 toast 通知。
Service 全局运行,需要作为服务在后台运行。
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
JSONArray place = jsonObj.getJSONArray("tuc");
JSONObject address = place.getJSONObject(0).getJSONObject("phrase");
meaning = address.getString("text");
} catch (final JSONException e) {
// Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG)
.show();
}
});
}
} else {
// Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pd.isShowing())
pd.dismiss();
showToast(result);
}
}
尝试在服务类中使用相同的代码,但它不起作用。 它可以编译,但运行时什么也不做..
请帮助我,我如何在服务类中解析 json。提前谢谢你
【问题讨论】:
-
你想在服务中解析 json 吗?给出一些情景,以便我们提供帮助。
-
服务在后台运行,每当用户复制任何文本时,它都会触发这个json,根据文本发送一个http请求进行一些处理,然后将结果显示为toast。它是一个作为后台服务运行并在系统范围内运行的应用程序。在此服务中使用 onPrimaryClipChanged() 检测文本的复制。它工作完美。现在我需要在 http get 请求中发送这个复制的文本并从服务器取回 json,然后解析它并在 toast 中显示结果,而不显示活动。
-
这不是在服务中执行此类操作的好方法。服务很重,消耗更多的电池和资源。您可以将 Intent 服务与 Intent Filters 一起使用,然后您可以启动透明 Activity,它可以执行所有这些操作并显示结果,然后您可以将其销毁,否则系统将销毁它。
-
您能详细说明一下吗?我们可以从 Intent 服务中检测到文本副本吗?
-
我对剪贴板框架了解不多。但你应该检查一下 - stackoverflow.com/questions/6931359/…
标签: java android json parsing service