Android Studio学了有几天了,需要做的基本做完了,遂整理一下用到的各种方法
1.实现HTTP请求
Android9.0以上默认限制http请求,需要在AndroidManifest.xml中添加如下语句:
1 <manifest> 2 <uses-permission android:name="android.permission.INTERNET" /> 3 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 4 </manifest>
然后新建res/xml/network_security_config.xml文件
1 <?xml version="1.0" encoding="utf-8"?> 2 <network-security-config> 3 <base-config cleartextTrafficPermitted="true" /> 4 </network-security-config>
2.在主线程中进行网络操作
Android不支持在主线程中进行诸如网络请求等耗时间的操作,需要在主线程中新建一个子线程,如使用button触发网络请求:
1 btn_test.setOnClickListener(v -> { 2 new Thread(() -> { 3 Looper.prepare();//增加部分 4 *****.request(); 5 Looper.loop();//增加部分 6 }).start();
我第一次测试的时候没加Looper那两行也成功了,但之后加了一些页面跳转、弹窗等功能后就报错了
3.button触发AlertDialog弹窗+静态Spinner
首先新建res/values/spinner_items.xml文件,这个可以看成一个String[],所有静态spinner的项都可以在里面预先定义好:
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <string-array name="***"> 4 <item>***</item> 5 <item>***</item> 6 </string-array> 7 <string-array name="***"> 8 <item>***</item> 9 <item>***</item> 10 </string-array> 11 </resources>
button单击触发显示弹窗的函数:
btn_test.setOnClickListener(view -> showAddDialog());
新建一个layout/dialog.xml,其中spinner的entries设置为
android:entries="@array/***"//***为spinner_item里对应String-array的name
显示弹窗的函数:
1 protected void showAddDialog() { 2 LayoutInflater factory = LayoutInflater.from(this); 3 final View textEntryView = factory.inflate(R.layout.dialog, null); 4 final EditText ***= textEntryView.findViewById(R.id.***); 5 AlertDialog.Builder ad1 = new AlertDialog.Builder(this); 6 Spinner sp_test= textEntryView.findViewById(R.id.***); 7 String[] ***= getResources().getStringArray(R.array.***);//***为spinner_item里对应String-array的name 8 sp_test.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 9 @Override 10 public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
//***[i]就是选中的值 11 } 12 13 @Override 14 public void onNothingSelected(AdapterView<?> adapterView) { 15 16 } 17 }); 18 19 ad1.setTitle("***"); 20 ad1.setView(textEntryView); 21 22 ad1.setPositiveButton("是", (dialog, i) -> { 23 24 }); 25 ad1.setNegativeButton("否", (dialog, i) -> { 26 }); 27 ad1.show();// 显示对话框 28 29 }
4.button触发页面切换+两页面中传参+动态spinner
button单击事件中:
Intent intent = new Intent(this,***.class);//***为另一页面 intent.putExtra(KEY_WORD, ***);//***为待传参数 startActivity(intent);
子页面中:
1 ArrayAdapter<String> adapter; 2 ArrayList<String> list = new ArrayList<>(); 3 Spinner sp_test= findViewById(R.id.***); 4 Intent intent = getIntent(); 5 String[] pram= intent.getStringArrayExtra(MainActivity.KEY_WORD); 6 list.addAll(Arrays.asList(pram)); 7 adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 8 sp_test.setAdapter(adapter);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界