关于okhttp的一个小问题
我之前是单纯的做APP开发的,现在工作需要,开始学习Python写APP接口,接口写好了,就是一个登陆的小例子,用浏览器和Postman测试,都是可以成功的,所以就想在APP里用okhttp试验一下。APP代码如下:
package com.example.djangodemo.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.example.djangodemo.R; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class LoginActivity extends AppCompatActivity { private Button Log_button; private EditText Log_ed_name; private EditText Log_ed_password; private String username; private String password; private TextView Log_tv_reg; private static String BaseUrl = "http://10.0.3.2:8000"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); initView(); initClick(); } /** * 初始化点击事件 */ private void initClick() { Log_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { username = Log_ed_name.getText().toString().trim(); password = Log_ed_password.getText().toString().trim(); if(judgeInput(username,password)){//判断用户输入信息的逻辑 new Thread(){ @Override public void run() { super.run(); try { getDateFromServer(username,password); } catch (IOException e) { e.printStackTrace(); } } }.start(); } } }); Log_tv_reg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); } private void initView() { Log_button = (Button) findViewById(R.id.Log_button); Log_ed_name = (EditText) findViewById(R.id.Log_ed_name); Log_ed_password = (EditText) findViewById(R.id.Log_ed_password); Log_tv_reg = (TextView) findViewById(R.id.Log_tv_reg); } /** * 用于判断填写的内容是不是空() * @param name * @param password * @return */ private Boolean judgeInput(String name,String password){ if(name.isEmpty() || password.isEmpty()){ Toast.makeText(LoginActivity.this,"账号或密码为空",Toast.LENGTH_SHORT).show(); return false; }else{ return true;//返回true说明账号输入正确 } } /** * 提交信息网络操作 * @param name 用户名 * @param password 密码 */ private void getDateFromServer(String name, String password) throws IOException { String url = BaseUrl+"/apps/login/?username="+name+"&password="+password; Request request = new Request.Builder() .url(url) .build(); OkHttpClient mHttpClient = new OkHttpClient(); Call call = mHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { System.out.println("返回成功!"); } }); } /** * 用于判断是否是正确手机号的正则表达式 * @param mobiles * @return */ public static boolean isMobileNO(String mobiles) { Pattern p = Pattern .compile("^[1][358]\d{9}$"); Matcher m = p.matcher(mobiles); return m.matches(); } }
问题来了,
call.enqueue()这个方法,总是无法执行,打断点调试,也是跳过这一段代码,okhttp不是很熟悉,请大神指点一二;不胜感激!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
那我自己回答把,使用Genymotion模拟器的话,需要将代码中的IP地址改为10.0.3.2 就可以了