• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

请问各位,跟着号码归属地的课程编写的代码,报错这个怎么回事?

报错:E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.searchphone, PID: 30446
                  java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/text/Charsets;
                      at okio.Buffer.(Buffer.kt:2212)
                      at okhttp3.ResponseBody.create(ResponseBody.java:210)
                      at okhttp3.internal.Util.(Util.java:60)
                      at okhttp3.internal.Util.immutableList(Util.java:234)
                      at okhttp3.OkHttpClient.(OkHttpClient.java:123)
                      at com.example.searchphone.business.HttpUntil.(HttpUntil.java:30)
                      at com.example.searchphone.mvp.Presenter.MainPresenter.sendHttp(MainPresenter.java:41)
                      at com.example.searchphone.mvp.Presenter.MainPresenter.searchPhoneinfo(MainPresenter.java:36)
                      at com.example.searchphone.MainActivity.onClick(MainActivity.java:44)
                  

详细说明:报错显示错误主要在at com.example.searchphone.business.HttpUntil.(HttpUntil.java:30)
                      at com.example.searchphone.mvp.Presenter.MainPresenter.sendHttp(MainPresenter.java:41)
                      at com.example.searchphone.mvp.Presenter.MainPresenter.searchPhoneinfo(MainPresenter.java:36)
                      at com.example.searchphone.MainActivity.onClick(MainActivity.java:44)
这几行,但是编写处理逻辑没有问题啊,请各位好心人看一下,谢谢!

代码:
package com.example.searchphone;import android.app.ProgressDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.example.searchphone.model.Phone;import com.example.searchphone.mvp.Presenter.MainPresenter;import com.example.searchphone.mvp.mvpMainView;public class MainActivity extends AppCompatActivity implements View.OnClickListener, mvpMainView {    EditText input_phone;    Button search;    TextView result_phone;    TextView result_province;    TextView result_server;    TextView result_carrier;    MainPresenter mainPresenter;    ProgressDialog progressDialog;//进度条    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        input_phone = (EditText) findViewById(R.id.input_phone);//引用部件        search = (Button) findViewById(R.id.search);        result_carrier = (TextView) findViewById(R.id.result_carrier);        result_phone = (TextView) findViewById(R.id.input_phone);        result_province = (TextView) findViewById(R.id.result_province);        result_server = (TextView) findViewById(R.id.result_server);        search.setOnClickListener(this);        mainPresenter = new MainPresenter(this);        mainPresenter.Click(this);    }    @Override    public void onClick(View view) {           //错误的地方        mainPresenter.searchPhoneinfo(input_phone.getText().toString());//将手机号码传入mainpresenter    }    //mvpMainView接口的方法    @Override    public void showToast(String msg) {        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();    }    @Override    public void updateView() {        Phone phone = mainPresenter.getPhone();        result_phone.setText("手机号码" + phone.getTelephone());        result_province.setText("省份" + phone.getProvince());        result_server.setText("运营商" + phone.getServer());        result_carrier.setText("归属运营商" + phone.getCarrier());    }    @Override    public void showLoading() {        if (progressDialog == null) {            progressDialog = ProgressDialog.show(this, "提示", "正在加载...", false);        } else if (progressDialog.isShowing()) {            progressDialog.setTitle("");            progressDialog.setMessage("正在加载...");        }        progressDialog.show();    }    @Override    public void hidenLoading() {        if (progressDialog != null && progressDialog.isShowing()) {            progressDialog.dismiss();        }    }}控制模块
package com.example.searchphone.mvp.Presenter;import com.example.searchphone.business.HttpUntil;import com.example.searchphone.model.Phone;import com.example.searchphone.mvp.mvpMainView;import org.json.JSONException;import org.json.JSONObject;import java.util.HashMap;import java.util.Map;/** *专注与mainactivity的逻辑 */public class MainPresenter extends BasePresenter{    String murl="https;//tcc.taobao.com/cc/json/mobile_tel_segment.htm";    mvpMainView mvpmainView;    Phone mphone;    public Phone getPhone(){        return mphone;    }    public MainPresenter(mvpMainView mainView){        mvpmainView=mainView;        //与view进行交互    }    public void searchPhoneinfo(String phone){        if(phone.length()!=11){            mvpmainView.showToast("请输入正确的手机号码");            return;        }        mvpmainView.showLoading();        //接下来写http请求处理逻辑        sendHttp(phone);                  //错误的地方    }    private void sendHttp(String phone){                   Mapmap=new HashMap();        map.put("tel",phone);        HttpUntil httpUntil =new HttpUntil(new HttpUntil.HttpResponse(){  //错误的地方            public void onSuccess(Object object){                String json=object.toString();//将object转化为string                int index=json.indexOf("{");//截取前端多余字符,indexOf方法可返回某个指定的字符串值在字符串中首次出现的位置                json=json.substring(index,json.length());                //jsonObject               mphone= parseModelWithOrgjson(json);                mvpmainView.hidenLoading();                mvpmainView.updateView();            }            public void onFail(String error){                mvpmainView.showToast(error);                mvpmainView.hidenLoading();            }        });        httpUntil.sendGetHttp(murl,map);    }   private Phone parseModelWithOrgjson(String json)//解析方法   {       Phone phone =new Phone ();       try {            JSONObject jsonObject=new JSONObject(json);           String value=jsonObject.getString("telphone");           phone.setTelephone(value);           value=jsonObject.getString("province");           phone.setProvince(value);            value=jsonObject.getString("server");           phone.setServer(value);           value=jsonObject.getString("carrier");           phone.setCarrier(value);       } catch (JSONException e) {           e.printStackTrace();       }       return phone;   }}OK HTTP框架使用
package com.example.searchphone.business;import android.os.Looper;import java.io.IOException;import java.nio.MappedByteBuffer;import java.util.Iterator;import java.util.Map;import android.os.Handler;import okhttp3.Call;import okhttp3.Callback;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * Created by 陈茂洋 on 2018/10/30. */public class HttpUntil {    String murl;    Map mparam;    HttpResponse mresponse;    Handler myhandler = new Handler(Looper.getMainLooper());    private final OkHttpClient client = new OkHttpClient();   //错误的地方    public interface HttpResponse {//回调接口,拿到返回的数据        void onSuccess(Object object);        void onFail(String error);    }    public HttpUntil(HttpResponse response) {        mresponse = response;    }    //发送http    public void sendPostHttp(String url, Map param) {        sendHttp(url, param, true);    }    //获取http    public void sendGetHttp(String url, Map param) {        sendHttp(url, param, false);    }    //发送核心    private void sendHttp(String url, Map param, boolean isPost) {        murl = url;        mparam = param;        //编写请求逻辑        run(isPost);    }    //发送逻辑    private void run(boolean isPost) {        Request request = createRequest(isPost);        //创建请求队列        client.newCall(request).enqueue(new Callback() {//将request传递到队列中            @Override            public void onFailure(Call call, IOException e) {//回调方法                if (mresponse != null) {                    myhandler.post(new Runnable() {                        public void run() {                            mresponse.onFail("请求错误");                        }                    });                }            }            @Override            public void onResponse(Call call, final Response response) throws IOException {                if (mresponse == null)                    return;                myhandler.post(new Runnable() {                    public void run() {                        if (!response.isSuccessful()) {                            mresponse.onFail("请求失败" + response);                        } else {                            try {                                mresponse.onSuccess(response.body().string());                            } catch (IOException e) {                                e.printStackTrace();                                mresponse.onFail("结果转换失败");                            }                        }                    }                });            }        });    }    //第一步完成client对象后,第二步设置request方法    private Request createRequest(boolean isPost) {        Request request;        if (isPost) {            MultipartBody.Builder resquestBodyBuilder;            resquestBodyBuilder = new MultipartBody.Builder();//实现上传文件或参数            resquestBodyBuilder.setType(MultipartBody.FORM);            //便利map请求参数            /*获得map的迭代器,用作遍历map中的每一个键值对            Iterator是迭代器,map之前应该定义过,姑且认为是HashMap。            表示map中的键值对都是String类型的。            map.entrySet()是把HashMap类型的数据转换成集合类型            map.entrySet().iterator()是去获得这个集合的迭代器,保存在iter里面*/            Iterator iterator = mparam.entrySet().iterator();            while (iterator.hasNext()) {                Map.Entry entry = iterator.next();                resquestBodyBuilder.addFormDataPart(entry.getKey(), entry.getValue());//把参数添加到请求数据中            }            request = new okhttp3.Request.Builder().url(murl)                    .post(resquestBodyBuilder.build()).build();//创建请求        } else {//get的请求方式            String urlstr = murl + "?" + MapParamToString(mparam);            request = new Request.Builder().url(urlstr).build();        }        return request;    }    private String MapParamToString(Map param) {//拼接地址和参数        StringBuilder stringBuilder = new StringBuilder();        Iterator iterator = param.entrySet().iterator();        while (iterator.hasNext()) {            Map.Entry entry = iterator.next();            stringBuilder.append(entry.getKey() + "=" + entry.getValue() + "&");        }        String str = stringBuilder.toString().substring(0, stringBuilder.length() - 1);//去掉最后一个符号为&        return str;    }}Model
package com.example.searchphone.model;public class Phone {    String telephone;    String province;    String server;    String carrier;    public String getServer() {        return server;    }    public void setServer(String server) {        this.server = server;    }    public String getTelephone() {        return telephone;    }    public void setTelephone(String telephone) {        this.telephone = telephone;    }    public String getCarrier() {        return carrier;    }    public void setCarrier(String carrier) {        this.carrier = carrier;    }    public String getProvince() {        return province;    }    public void setProvince(String province) {        this.province = province;    }}

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

访问网络请求的jar包的版本问题。

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!