一个很恶心的打电话程序

上次我们做了一个简单的hello world,这次我们来写一个电话拨打系统,其实这个电话拨打并不是真正的自己的程序拨打的电话,而是调用的系统程序而实现的电话拨打。

首先我们建立项目Phone,在项目的aluesàstrings下创建所需要的字符串

<string name="app_name">Phone</string> <string name="input_info">请输入号码</string> <string name="dial_caotion">拨打</string>

然后在layoutàmain.xml下创建界面

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/input_info" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/phone_number" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/dial_btn" android:text="@string/dial_caotion" />

这个小程序一共用到了一个输入框,一个按钮,那个文本就不再说了。剩下的就是我们的java代码了。

我们需要在srcàPhoneActvity写实现代码,首先我们应该先获取用户在输入框里输入的电话号,然后再写一个监听内部类,用来监听按钮事件,具体实现代码就是下面这样

numberEt = (EditText) this.findViewById(R.id.phone_number); dialBtn = (Button) this.findViewById(R.id.dial_btn); dialBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //调用系统的拨号服务实现电话的拨打功能 Stringphone_number = numberEt.getText().toString(); phone_number= phone_number.trim(); if(phone_number !=null&&!phone_number.equals("")){ //封装一个打电话的intent,并且将电话号码包装成一个Uri对象传入 Intentintent = newIntent(Intent.ACTION_CALL,Uri.parse("tel:" +phone_number)); PhoneActivity.this.startActivity(intent); } } });

### 处理硅基流动的Rate Limits 当遇到API速率限制(Rate Limits)时,采取合理的方法来管理和优化请求频率是非常重要的。尝试通过以下几种策略来有效应对这个问题: #### 1. 请求批量化 将多个小型请求合并成单个较大规模的请求,以此减少总的请求数量。这不仅有助于降低触发率限的可能性,还能提高数据传输效率。 ```python import requests def batch_requests(data_list, api_key): headers = {"Authorization": f"Bearer {api_key}"} payload = { "prompt": "\n".join([item['text'] for item in data_list]), "max_tokens": 50, "model": "deepseek-r1" } response = requests.post('https://cloud.siliconflow.cn/api/v1/generate', json=payload, headers=headers) return response.json() ``` #### 2. 实施指数退避算法 如果确实遇到了临时性的速率限制错误响应,则可以在重试之前等待一段时间再发送下一个请求。每次失败后的延迟时间应该逐渐增加,直到成功为止或达到最大重试次数。 ```python from time import sleep retry_count = 0 while retry_count < max_retries: try: result = make_api_call(api_key) # 假设这是发起一次API调用的功能函数 break except RateLimitError as e: wait_time = min(2 ** retry_count * base_delay, max_wait_time) print(f"Hitting rate limit, waiting for {wait_time} seconds before retrying...") sleep(wait_time) retry_count += 1 else: raise Exception("Failed after multiple retries due to hitting the rate limits.") ``` #### 3. 利用缓存机制 对于那些不会频繁变化的数据查询结果,考虑引入本地缓存层。这样可以避免重复提交相同的请求给服务器端,从而减轻压力并节省配额。 #### 4. 合理规划应用逻辑设计 评估应用程序的工作流程,寻找可能存在的不必要的高频次API调用场景,并对其进行重构以适应更宽松的时间窗口内完成相同的目标任务。 以上方法均旨在帮助开发者更好地理解和遵循API提供商设定的服务条款,在不违反规定的情况下尽可能高效地利用资源[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值