从URL创建JSON文件

时间:2017-02-17 06:17:00

标签: json url null

大家好我从谷歌网址创建JSON文件时遇到问题。这是我使用的代码。

import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;


public class DownloadUrl {

public String readUrl(String strUrl) throws IOException, InterruptedException {
    Log.d("URLS = ",strUrl);
    Thread.sleep(2000);
    String data = "";
    InputStream iStream = null;
    HttpURLConnection urlConnection = null;
    try {
        URL url = new URL(strUrl);

        // Creating an http connection to communicate with url
        urlConnection = (HttpURLConnection) url.openConnection();

        // Connecting to url
        urlConnection.connect();

        // Reading data from url
        iStream = urlConnection.getInputStream();

        BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

        StringBuffer sb = new StringBuffer();

        String line = "";
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }

        data = sb.toString();
        Log.d("downloadUrl", data.toString());
        br.close();

    } catch (Exception e) {
        Log.d("Exception", e.toString());
    } finally {
        iStream.close();
        urlConnection.disconnect();
    }
    return data;
}

}

当我将一个看起来像这样的网址扔进去的时候它工作正常。 https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=40.7207523,-73.383851&radius=4828&type=bar&key=MYKEY

但是当我尝试将一个看起来像这样的网址扔进去的时候。 https://maps.googleapis.com/maps/api/place/details/json?placeid=ChIJe3AmoGsr6IkRuWcK1LAh-DE&key=MYKEY

我收到错误:D / GooglePlacesReadTask:java.lang.NullPointerException:尝试调用虚方法' void java.io.InputStream.close()'在空对象引用上

我不知道我是如何解决这个问题的。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

啊哈 你没有提到这是在android中, 我认为这是因为你说, android.os.NetworkOnMainThreadException 在你的评论中

Android不允许在主线程上执行耗时的任务, 使用AsyncTask来调用你的函数或使用普通的旧java线程

答案 1 :(得分:0)

在主线程上运行网络操作时出现主线程异常网络。 通常AsyncTask用于这些工作,但如果你想使用你编写的相同代码,只需添加..

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);