当前位置:   article > 正文

仿登录界面,Android调用服务器后端api,提交GET/POST参数,返回json格式数据_android获取api接口的数据怎么放到布局中

android获取api接口的数据怎么放到布局中

(这段话可以省略不看)记得从学校出来实习,入职第一家公司时,第一次听到Android调用api接口,获取后台的数据。感觉一脸懵逼,因为在学校做的一些安卓项目基本都是原生的app知识,基础控件的使用,甚至需要网络服务的项目都是少的可怜。回到上个问题,在网上找了一下资料,整理了代码。

不扯话题了,看下面完整代码。

    第一(简单布局图):

                        

布局文件:activity_login.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical"
  7. tools:context="com.example.think.textone_login.MainActivity">
  8. <TextView
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:text="测试登录"
  12. android:gravity="center"
  13. android:textSize="28dp"
  14. />
  15. <LinearLayout
  16. android:orientation="vertical"
  17. android:layout_width="match_parent"
  18. android:layout_height="match_parent"
  19. android:layout_marginTop="15dp">
  20. <EditText
  21. android:id="@+id/et_username"
  22. android:layout_width="match_parent"
  23. android:layout_height="wrap_content"
  24. android:hint="用户名"
  25. />
  26. <EditText
  27. android:id="@+id/et_psd"
  28. android:layout_width="match_parent"
  29. android:layout_height="wrap_content"
  30. android:hint="密码"
  31. />
  32. <Button
  33. android:id="@+id/bt_login"
  34. android:layout_width="match_parent"
  35. android:layout_height="wrap_content"
  36. android:text="登录"
  37. />
  38. </LinearLayout>
  39. </LinearLayout>
  40. 字符转换类 NetUtils.java :
  1. public class NetUtils {
  2. public static byte[] readBytes(InputStream is){
  3. try {
  4. byte[] buffer = new byte[1024];
  5. int len = -1 ;
  6. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  7. while((len = is.read(buffer)) != -1){
  8. baos.write(buffer, 0, len);
  9. }
  10. baos.close();
  11. return baos.toByteArray();
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. }
  15. return null ;
  16. }
  17. public static String readString(InputStream is){
  18. return new String(readBytes(is));
  19. }
  20. }

LoginActivity.java:

  

  1. public class LoginActivity extends AppCompatActivity {
  2. private EditText et_username, et_psd;
  3. private Button bt_login;
  4. private String resultCode,resultMsg;
  5. String account, pwd;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_login);
  10. //隐藏标题
  11. getSupportActionBar().hide();
  12. init();
  13. }
  14. private void init() {
  15. et_username = findViewById(R.id.et_username);
  16. et_psd = findViewById(R.id.et_psd);
  17. bt_login = findViewById(R.id.bt_login);
  18. bt_login.setOnClickListener(new View.OnClickListener() {
  19. @Override
  20. public void onClick(View view) {
  21. //获取相应用户名和密码
  22. account = et_username.getText().toString();
  23. pwd = et_psd.getText().toString();
  24. if (account.equals("") || pwd.equals("")) {
  25. Toast.makeText(getApplicationContext(), "用户名或密码为空", Toast.LENGTH_SHORT).show();
  26. }
  27. Thread thread = new Thread(new Runnable() {
  28. @Override
  29. public void run() {
  30. int num = init_api(account, pwd);
  31. if (resultCode.equals("0")) {
  32. Intent intent = new Intent(LoginActivity.this, MainActivity.class);
  33. startActivity(intent);
  34. } else {
  35. Toast.makeText(getApplicationContext(), "用户名或密码错误", Toast.LENGTH_SHORT).show();
  36. }
  37. }
  38. });
  39. thread.start();
  40. }
  41. });
  42. }
  43. private int init_api(String account, String pwd) {
  44. String urlPath = "http://xxxxxxxx/api/v1.index/login";
  45. URL url;
  46. int id = 0;
  47. try {
  48. url = new URL(urlPath);
  49. JSONObject jsonObject = new JSONObject();
  50. jsonObject.put("account", account);
  51. jsonObject.put("pwd", pwd);
  52. //参数put到json
  53. String content = String.valueOf(jsonObject);
  54. //开启连接
  55. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  56. conn.setConnectTimeout(5000);
  57. conn.setDoOutput(true);
  58. conn.setDoInput(true);
  59. conn.setRequestMethod("POST");//提交方式
  60. conn.setRequestProperty("Content-Type", "application/json");
  61. //写输出流,将要转的参数写入流
  62. OutputStream os = conn.getOutputStream();
  63. os.write(content.getBytes());
  64. os.close();
  65. int code = conn.getResponseCode();
  66. if (code == 200) {
  67. //读取返回的json
  68. InputStream inputStream = conn.getInputStream();
  69. //调用NetUtils() 将流转成String类型
  70. String json = NetUtils.readString(inputStream);
  71. System.out.println("adad" + json);
  72. JSONObject jsonObject1 = new JSONObject(json);
  73. resultCode = jsonObject1.getString("resultCode");
  74. resultMsg = jsonObject1.getString("resultMsg");
  75. System.out.println("json返回状态码====" + resultCode);
  76. System.out.println("json返回消息======" + resultMsg);
  77. } else {
  78. Toast.makeText(getApplicationContext(), "数据提交失败", Toast.LENGTH_SHORT).show();
  79. }
  80. } catch (MalformedURLException e) {
  81. e.printStackTrace();
  82. } catch (JSONException e) {
  83. e.printStackTrace();
  84. } catch (IOException e) {
  85. e.printStackTrace();
  86. }
  87. return id;
  88. }
  89. }

最后根据json返回的状态码(resultCode),确认跳转状态,如果为0,跳转MainActivity,显示一句话。

成功登录页面:MainActivity:

json返回数据:如图

最后由于时间仓促和自己的水平能力有限,很多东西写的不好,欢迎大家评论指点。以后Android开发遇到的坑,尽量在csdn上面分享,同时也会学习更多编程的知识,使得自己成长起来。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/264931
推荐阅读
相关标签
  

闽ICP备14008679号