作为新手开发安卓App所遇到的问题及解决

1.前言

最近和实验室的朋友一起做了一个项目,我主要负责安卓应用开发。开发中遇到了许多新手常见问题,下面就是这些问题和解决方案。

2.正文

  1. App的主要功能是通过和服务器交互,获取服务器端的json文件,然后通过安卓UI组件动态显示出来。点击对应的按钮则向服务器发出对应请求。
    作为新手开发安卓App所遇到的问题及解决_第1张图片
  2. 做App时主要遇到了两个错误。第一就是直接在主线程中发送网络请求;第二就是在其他线程中修改UI组件。这两个错误其实是安卓开发的常识性错误:不能在主线程中访问网络;不能在其他线程中获取和修改UI组件。
  3. 具体错误及解决方法
    • 不能在主线程中访问网络:新开一个线程来访问网络。
    • 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() {
            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 = HttpUtil.getHttpResult(url);
                if(result  == null) {
                    Looper.prepare();
                    ToastUtil.showToast(MainActivity.this, "网络连接错误");
                    Looper.loop();
                } else {
                    try {
                        JSONArray array = new JSONArray(result);
                        light_value = array.getJSONObject(0).getString("guang");
                        water_value = array.getJSONObject(0).getString("shidu");
                        nutrition_value = array.getJSONObject(0).getString("wendu");
                        jiaoshui = array.getJSONObject(0).getString("jiaoshui");
                        yingyang = array.getJSONObject(0).getString("shifei");
                        buguang = array.getJSONObject(0).getString("buguang");
                        //上面已经把要处理的东西处理完了,接下来调用post方法来更新UI
                        mHandler.post(mUpdateResults);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  1. 还有一些其他错误如用wamp一键搭建web服务器时发现同一局域网下手机访问网站403了。解决方法如下:把箭头所指的文件的里面的Require local改成Require all granted,然后重启服务器手机就可以访问了。
    作为新手开发安卓App所遇到的问题及解决_第2张图片
    作为新手开发安卓App所遇到的问题及解决_第3张图片

3.总结

  1. 务必学好Java再碰安卓(当然现在开发安卓也可以用Kotlin)。
  2. 比赛一定要找适合的队友组队(别随缘找队友了 ),不然真心觉得憨上加憨。
    作为新手开发安卓App所遇到的问题及解决_第4张图片
  3. 好好学习,天天向上。

你可能感兴趣的:(《零基础到App上线》学习笔记)