android软件开发的问题,作为新⼿开发安卓App所遇到的问题
及解决
1.前⾔
最近和实验室的朋友⼀起做了⼀个项⽬,我主要负责安卓应⽤开发。开发中遇到了许多新⼿常见问题,下⾯就是这些问题和解决⽅案。
2.正⽂
App的主要功能是通过和服务器交互,获取服务器端的json⽂件,然后通过安卓UI组件动态显⽰出来。点击对应的按钮则向服务器发出对应请求。
做App时主要遇到了两个错误。第⼀就是直接在主线程中发送⽹络请求;第⼆就是在其他线程中修改UI组件。这两个错误其实是安卓开发的常识性错误:不能在主线程中访问⽹络;不能在其他线程中获取和修改UI组件。
具体错误及解决⽅法
不能在主线程中访问⽹络:新开⼀个线程来访问⽹络。
Only the original thread that created a view hierarchy can touch its views(只有原来创建UI组件的线程才能访问这个UI组件):参考这篇⽂章戳这⾥。下⾯是我参考这篇⽂章后的主要代码⽚段。
//新建⼀个Hander
private final Handler mHandler = new Handler();
//更新UI组件的runnable接⼝
final Runnable mUpdateResults = new Runnable() {
public void run() {
简易安卓app开发
updateUI();
}
};
//更新UI组件的具体操作
private void updateUI() {
tv_light_value.setText(light_value);
tv_nutrition_value.setText(nutrition_value);
tv_water_value.setText(water_value);
}
//这个类中把要做的事情做完了之后 调⽤hander的post⽅法来更新UI class jsonThread implements Runnable {
private String url;
public jsonThread(String url) {
this.url = url + "/guang.json";
}
@Override
public void run() {
while(true) {
String result = HttpResult(url);
if(result == null) {
Looper.prepare();
ToastUtil.showToast(MainActivity.this, "⽹络连接错误");
Looper.loop();
} else {
try {
JSONArray array = new JSONArray(result);
light_value = JSONObject(0).getString("guang");
water_value = JSONObject(0).getString("shidu"); nutrition_value = JSONObject(0).getString("wendu"); jiaoshui = JSONObject(0).getString("jiaoshui"); yingyang = JSONObject(0).getString("shifei"); buguang = JSONObject(0).getString("buguang");
//上⾯已经把要处理的东西处理完了,接下来调⽤post⽅法来更新UI mHandler.post(mUpdateResults);
} catch (JSONException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
还有⼀些其他错误如⽤wamp⼀键搭建web服务器时发现同⼀局域⽹下⼿机访问⽹站403了。解决⽅法如下:把箭头所指的⽂件的⾥⾯的Require local改成Require all granted,然后重启服务器⼿机就可以访问了。
3.总结
务必学好Java再碰安卓(当然现在开发安卓也可以⽤Kotlin)。
⽐赛⼀定要适合的队友组队(别随缘队友了 ),不然真⼼觉得憨上加憨。
好好学习,天天向上。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论