I am trying to get json from Url when I click button, but getting null pointer exceptions and Unfortunately application stops This is my onCreate method.

我点击按钮时尝试从Url获​​取json,但是获取空指针异常并且遗憾的是应用程序停止这是我的onCreate方法。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    autoCompView = (AutoCompleteTextView)findViewById(R.id.autocomplete_current);

 findViewById(R.id.shortestButton).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            getUrl();//calling getUrl method for getting Url
        }
    });

This is my getUrl method for creating url and getting json from that url.

这是我的getUrl方法,用于创建url并从该url获取json。

private void getUrl() {
    String result = null;
    String dest1 = list.get(0);
    String dest2 = list.get(1);
    String dest3 = list.get(2);
    String start = getAddress();

        String urls = "https://maps.googleapis.com/maps/api/distancematrix/json?";
        try {
            encodedString = urls + "origins="
                    + URLEncoder.encode(start, "utf8")+"|"
                    + URLEncoder.encode(dest1, "utf8")+"|"
                    + URLEncoder.encode(dest2, "utf8")+"|"
                    + URLEncoder.encode(dest3, "utf8")
                    +"&destinations="
                    + URLEncoder.encode(dest1, "utf8")+"|"
                    + URLEncoder.encode(dest2, "utf8")+"|"
                    + URLEncoder.encode(dest3, "utf8")+"|"
                    + URLEncoder.encode(start, "utf8")
                    +"&mode=driving"
                    +"&language = en-En"
                    +"&key="+API_KEY;
            encodedString = encodedString.replaceAll("%2C","+");
            encodedString = encodedString.replaceAll("\\++", "+");

        }  

private class ConnectToUrlTask extends AsyncTask<String,Void,String> {

    @Override
    protected String doInBackground(String... uRl) {
        String data = "";

            HttpConnections httpConnections = new HttpConnections();
        try {
            data = httpConnections.readUrl(uRl[0]);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return data;
    }

    @Override
    protected void onPostExecute(String s) {
      new UrlTasks().execute(s);
    }
}
private class UrlTasks extends AsyncTask<String,Void,String> {

    @Override
    protected String doInBackground(String... params) {
        String distance = null;
        JSONObject jobj = null;

        try {
            jobj = new JSONObject(params[0]);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        try {
            JSONArray jsonArray = jobj.getJSONArray("rows");
          // Log.d("jsonArray", String.valueOf(jsonArray));
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject object = jsonArray.getJSONObject(i);
                JSONArray ja2 = object.getJSONArray("elements");
                for (int j = 0; j < ja2.length(); j++) {
                    JSONObject object3 = ja2.getJSONObject(j);
                    distance = object3.getJSONObject("distance").getString("text");
                }
            }
           //Log.d("jsonArray", String.valueOf(jsonArray));
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return distance;
    }

    @Override
    protected void onPostExecute(String s) {
        Log.d("St*",s);
    }
}

This is my Error log.

这是我的错误日志。

 java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:299)
        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
        at java.lang.Thread.run(Thread.java:838)
 Caused by: java.lang.NullPointerException
        at com.example.wm.shortestpathdemo.MainActivity$UrlTasks.doInBackground(MainActivity.java:359)
        at com.example.wm.shortestpathdemo.MainActivity$UrlTasks.doInBackground(MainActivity.java:346)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)

1 个解决方案

#1


i have made mistake in creating url. In method getUrl():

我在创建网址时犯了错误。在方法getUrl()中:

private void getUrl() {
String result = null;
String dest1 = list.get(0);
String dest2 = list.get(1);
String dest3 = list.get(2);
String start = getAddress();

    String urls = "https://maps.googleapis.com/maps/api/distancematrix/json?";
    try {
        encodedString = urls + "origins="
                + URLEncoder.encode(start, "utf8")+"|"
                + URLEncoder.encode(dest1, "utf8")+"|"
                + URLEncoder.encode(dest2, "utf8")+"|"
                + URLEncoder.encode(dest3, "utf8")
                +"&destinations="
                + URLEncoder.encode(dest1, "utf8")+"|"
                + URLEncoder.encode(dest2, "utf8")+"|"
                + URLEncoder.encode(dest3, "utf8")+"|"
                + URLEncoder.encode(start, "utf8")
                +"&mode=driving"
              // this is the mistake 
                +"&language = en-En"  
              //correct form is
                +"&language = en"
                +"&key="+API_KEY;
        encodedString = encodedString.replaceAll("%2C","+");
        encodedString = encodedString.replaceAll("\\++", "+");

    }  

更多相关文章

  1. ViewPager中的错误片段接收onContextItemSelected调用
  2. 四极管:I2CTools编译方法
  3. 检查ArrayList是否只包含null值的方法。
  4. 不同Android版本设备正确获取屏幕分辨率的通用方法
  5. 错误”. lang。当使用带有ViewPager的选项卡时,IllegalStateExcep
  6. studio更新时候,不小心点了ignore,无法更新的解决方法
  7. android之发送短信的方法研究
  8. SQLite的Android光标在方法调用时崩溃
  9. Java Android套接字连接。错误的IP地址导致应用程序停止响应

随机推荐

  1. 破解大众点评的字体加密,这一篇就够了。
  2. Python 如何移除旧的版本特性,如何迎接新
  3. 脚本实现Oracle19c_pdb单实例自动安装部
  4. centos 7下安装python3.8
  5. 破解X眼电影字体动态加密|凹凸玩数据
  6. 2000万条直播数据,揭秘斗鱼主播生存现状
  7. “三本”应届走社招,已顺利拿 offer & 附
  8. Python 为什么使用缩进来划分代码块?
  9. Android(安卓)项目多版本管理
  10. Python 的缩进是不是反人类的设计?