获取网络文字 更新UI

来源:互联网 发布:擎洲广达云计价软件 编辑:程序博客网 时间:2024/06/06 05:55

清单文件:

<uses-permission android:name="android.permission.INTERNET" /><!--==============================--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><!--读取网络状态的权限--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


/**

 * 主线程 ---UI线程,不可以阻塞, 如果阻塞会报ANR(application not response)
 * 子线程---, 耗时操作,联网就是耗时操作;
 */
public class MainActivity extends AppCompatActivity {


    public String urlString = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
    String urlBitmap = "http://img.my.csdn.net/uploads/201407/26/1406383265_8550.jpg";
    String tag = "wzq";
    private ImageView iv;
    private TextView tv;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int what = msg.what;
            switch (what) {
                case 1:
                    String infoText = (String) msg.obj;
                    tv.setText(infoText);
                    break;
                case 2:
                    break;


            }


        }
    };


    /**
     * alt+enter  自动补全
     * fbc --再tabfindViewByIde的快捷键;
     * ctrl+alt +F 声明全局变量
     * ctrl+alt +L  格式化代码
     *
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        iv = (ImageView) findViewById(R.id.iv);


        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //联网是耗时操作,不能直接在主线程写
                //子线程不能更新UI
                new Thread() {
                    @Override
                    public void run() {
                        super.run();
                        String netJson = NetUtil.getNetJson(urlString);
                        Gson gson = new Gson();
                        Product product = gson.fromJson(netJson, Product.class);
                        String infoText = product.getInfo();
                        Message message = new Message();
                        message.obj = infoText;
                        message.what = 1;
                        handler.sendMessage(message);
                    }
                }.start();

            }
        });
    }


}


public class NetUtil {
private static String  tag = "getNetJson";


        public static String getNetJson(String urlString){
            try {
                //url对象封装接口字符串
                URL url = new URL(urlString);
                //用url打开连接, 返回值我们用HttpURLConnection
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();


                InputStream inputStream = urlConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                //可拼接的字符串
                StringBuilder stringBuilder = new StringBuilder();
                String temp ="";
                while ( (temp= bufferedReader.readLine()) != null){
                    stringBuilder.append(temp);


                }
                String jsonString = stringBuilder.toString();
                return jsonString;


            } catch (MalformedURLException e) {
                e.printStackTrace();
                Log.e(tag, "getNetJson: "+ e.toString() );
            }catch (IOException e) {
                e.printStackTrace();
                Log.e(tag, "getNetJson: "+ e.toString() );
            }


            return "";
        }


}