我的應用程序的第一步工作是:當單擊一個按鈕時,它發出一個http請求,執行結果的JSON分析並顯示和存儲數據。我現在希望能夠安排事件,以便在背景中定期發生同樣的事情 - 而且我無法實現。 我已經看了幾個教程創建broadcastreceivers和報警 (http://justcallmebrian.com/?p=129和 http://mobile.tutsplus.com/tutorials/android/android-fundamentals-scheduling-recurring-tasks/) 和一個單獨的應用程序複製了簡單的版本,當預定事件發生時,僅僅產生 敬酒消息。 但是,當我嘗試合併這兩件事(安排一個事件來製作 http請求),複雜性正在擊敗我。如果有人可以給我一些指導 我會很感激。在android中安排http請求
第一步(工作)開始於一個按鈕單擊,它運行一個只有2行的方法。
urlStr = "http://data_service_site?parm=1";
new AsyncNetworkConnection().execute(urlStr);
然後主要活動有這個內聯類。
class AsyncNetworkConnection extends AsyncTask<String, String, String>
{
@Override
protected void onPostExecute(String result) {
//working JSON code here
//working code to display & store data here
}
@Override
protected String doInBackground(String... arg0) {
String results = null;
try {
results = fetchHTML(arg0[0]);
} catch (ClientProtocolException e) {
String msg = getResources().getString(R.string.str_html_error, e.getMessage());
Log.e(TAG, "Http error", e);
} catch (Exception e) {
String msg = getResources().getString(R.string.str_html_error, e.getMessage());
Log.e(TAG, "Http connection error", e);
}
return results;
}
private String fetchHTML(String urlStr) throws URISyntaxException, ClientProtocolException, IOException, Exception
{
DefaultHttpClient httpclient = null;
URI serviceUri = new URI(urlStr);
String result;
try {
HttpGet getRequest = new HttpGet(serviceUri);
ResponseHandler<String> handler = new BasicResponseHandler();
httpclient = new DefaultHttpClient();
result = httpclient.execute(getRequest, handler);
Log.i(TAG, "Put to Service. Result: " + result);
} catch (Exception e) {
throw e;
} finally {
if(null != httpclient){
httpclient.getConnectionManager().shutdown();
}
}
return result;
}
}
上述工作;接下來沒有。 要嘗試調度相同任務的簡單方法,我添加了另一個運行此方法的按鈕。
public void setOneOffAlarm(View v) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, 2);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
}
而且我有這個alarmreceiver類。我在將它創建爲單獨的類文件時遇到了問題,因此請將其作爲同一活動中的內聯類。我首先嚐試執行http請求,然後嘗試將其簡化爲僅顯示Toast消息 - 兩者都不起作用。
public class AlarmReceiver extends BroadcastReceiver {
private static final String DEBUG_TAG = "AlarmReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Intent downloader = new Intent(context, AsyncNetworkConnection.class);
//downloader.setData(Uri
//.parse("http://data_service_site?parm=1"));
//Try just showing toast:
String message = ("alarm_message");
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
context.startService(downloader);
}
}
任何幫助表示讚賞。
你有沒有考慮過運行這個[service](http://developer.android.com/reference/android/app/Service.html),這裏有一個相當全面的例子:http://www.vogella.com/文章/ AndroidServices/article.html – HeatfanJohn 2013-05-03 14:59:41