Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中解析JSON?_Android_Json - Fatal编程技术网

在Android中解析JSON?

在Android中解析JSON?,android,json,Android,Json,你好,安卓程序员 我正在制作一个货币应用程序,为此,我从以下网站获取我的货币汇率(返回json): 下面是我程序中的方法,它可以获取网站上的所有费率 public String[] fetchCurrencyRates() { String[] currencyValues = new String[currency_array.length]; //currency_array has the names of all the currencies try {

你好,安卓程序员

我正在制作一个货币应用程序,为此,我从以下网站获取我的货币汇率(返回json):

下面是我程序中的方法,它可以获取网站上的所有费率

public String[] fetchCurrencyRates()
{
    String[] currencyValues = new String[currency_array.length]; //currency_array has the names of all the currencies
    try
    {
        URL currency = new URL("https://raw.github.com/currencybot/open-exchange-rates/master/latest.json");
        URLConnection c = currency.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
        String line;
        while ((line = in.readLine()) != null)
        {
            JSONArray ja = new JSONArray(line);
            for (int i = 0; i < ja.length(); i++)
            {
                JSONObject jo = (JSONObject) ja.get(i);
                currencyValues[i] = (jo.getString("rates"));
            }
        }
    }
    catch (MalformedURLException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (JSONException e) {
    e.printStackTrace();
    }
    return currencyValues;
}
public字符串[]fetchCurrencyRates()
{
String[]currencyValues=新字符串[currency_array.length];//currency_array包含所有货币的名称
尝试
{
URL货币=新URL(“https://raw.github.com/currencybot/open-exchange-rates/master/latest.json");
URLConnection c=currency.openConnection();
BufferedReader in=新的BufferedReader(新的InputStreamReader(c.getInputStream());
弦线;
而((line=in.readLine())!=null)
{
JSONArray ja=新JSONArray(线);
对于(int i=0;i
由于某种原因,这种方法不起作用。现在我将发布LogCat,以帮助我调试此方法

03-29 13:42:21.323: E/AndroidRuntime(678): FATAL EXCEPTION: main
03-29 13:42:21.323: E/AndroidRuntime(678): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sapra.currency/com.sapra.currency.TheUltimateCurrencyConverterActivity}: android.os.NetworkOnMainThreadException
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.os.Looper.loop(Looper.java:137)
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.app.ActivityThread.main(ActivityThread.java:4424)
03-29 13:42:21.323: E/AndroidRuntime(678):  at java.lang.reflect.Method.invokeNative(Native Method)
03-29 13:42:21.323: E/AndroidRuntime(678):  at java.lang.reflect.Method.invoke(Method.java:511)
03-29 13:42:21.323: E/AndroidRuntime(678):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-29 13:42:21.323: E/AndroidRuntime(678):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-29 13:42:21.323: E/AndroidRuntime(678):  at dalvik.system.NativeStart.main(Native Method)
03-29 13:42:21.323: E/AndroidRuntime(678): Caused by: android.os.NetworkOnMainThreadException
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
03-29 13:42:21.323: E/AndroidRuntime(678):  at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
03-29 13:42:21.323: E/AndroidRuntime(678):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
03-29 13:42:21.323: E/AndroidRuntime(678):  at java.net.InetAddress.getAllByName(InetAddress.java:220)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:460)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
03-29 13:42:21.323: E/AndroidRuntime(678):  at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:270)
03-29 13:42:21.323: E/AndroidRuntime(678):  at com.sapra.currency.TheUltimateCurrencyConverterActivity.fetchCurrencyRates(TheUltimateCurrencyConverterActivity.java:60)
03-29 13:42:21.323: E/AndroidRuntime(678):  at com.sapra.currency.TheUltimateCurrencyConverterActivity.onCreate(TheUltimateCurrencyConverterActivity.java:51)
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.app.Activity.performCreate(Activity.java:4465)
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-29 13:42:21.323: E/AndroidRuntime(678):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
03-29 13:42:21.323: E/AndroidRuntime(678):  ... 11 more
03-29 13:42:21.323:E/AndroidRuntime(678):致命异常:main
03-29 13:42:21.323:E/AndroidRuntime(678):java.lang.RuntimeException:无法启动活动组件信息{com.sapra.currency/com.sapra.currency.TheUltimateCurrencyConverterActivity}:android.os.NetworkOnMainThreadException
03-29 13:42:21.323:E/AndroidRuntime(678):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
03-29 13:42:21.323:E/AndroidRuntime(678):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-29 13:42:21.323:E/AndroidRuntime(678):在android.app.ActivityThread.access$600(ActivityThread.java:123)
03-29 13:42:21.323:E/AndroidRuntime(678):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-29 13:42:21.323:E/AndroidRuntime(678):位于android.os.Handler.dispatchMessage(Handler.java:99)
03-29 13:42:21.323:E/AndroidRuntime(678):在android.os.Looper.loop(Looper.java:137)
03-29 13:42:21.323:E/AndroidRuntime(678):位于android.app.ActivityThread.main(ActivityThread.java:4424)
03-29 13:42:21.323:E/AndroidRuntime(678):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-29 13:42:21.323:E/AndroidRuntime(678):在java.lang.reflect.Method.invoke(Method.java:511)
03-29 13:42:21.323:E/AndroidRuntime(678):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-29 13:42:21.323:E/AndroidRuntime(678):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-29 13:42:21.323:E/AndroidRuntime(678):在dalvik.system.NativeStart.main(本机方法)
03-29 13:42:21.323:E/AndroidRuntime(678):由以下原因引起:android.os.NetworkOnMainThreadException
03-29 13:42:21.323:E/AndroidRuntime(678):在android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
03-29 13:42:21.323:E/AndroidRuntime(678):位于java.net.InetAddress.lookupHostByName(InetAddress.java:391)
03-29 13:42:21.323:E/AndroidRuntime(678):位于java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
03-29 13:42:21.323:E/AndroidRuntime(678):位于java.net.InetAddress.getAllByName(InetAddress.java:220)
03-29 13:42:21.323:E/AndroidRuntime(678):在libcore.net.http.HttpConnection.(HttpConnection.java:71)
03-29 13:42:21.323:E/AndroidRuntime(678):在libcore.net.http.HttpConnection.(HttpConnection.java:50)
03-29 13:42:21.323:E/AndroidRuntime(678):在libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
03-29 13:42:21.323:E/AndroidRuntime(678):在libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
03-29 13:42:21.323:E/AndroidRuntime(678):在libcore.net.http.HttpConnection.connect(HttpConnection.java:128)上
03-29 13:42:21.323:E/AndroidRuntime(678):位于libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
03-29 13:42:21.323:E/AndroidRuntime(678):在libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:460)
03-29 13:42:21.323:E/AndroidRuntime(678):在libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432)
03-29 13:42:21.323:E/AndroidRuntime(678):位于libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
03-29 13:42:21.323:E/AndroidRuntime(678):位于libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
03-29 13:42:21.323:E/AndroidRuntime(678):在libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
03-29 13:42:21.323:E/AndroidRuntime(678):在libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
03-29 13:42:21.323:E/AndroidRuntime(678):在libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:270)
03-29 13:42:21.323:E/AndroidRuntime(678):在com.sapra.currency.TheUltimateCurrencyConverterActivity.fetchCurrencyRates(TheUltimateCurrencyConverterActivity.java:60)
03-29 13:42:21.323:E/AndroidRuntime(678):在com.sapra.currency.TheUltimateCurrencyConverterActivity.onCreate上(TheUltimateCurrencyConverterActivity.java:51)
03-29 13:42:21.323:E/AndroidRuntime(678):在android.app.Activity.performCreate(Activity.java:4465)上
03-29 13:42:21.323:E/AndroidRuntime(678):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-29 13:42:21.323:E/AndroidRuntime(678):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)上
03-29 13:42:21.323:E/AndroidRuntime(678):。。。还有11个
我已经确认这个方法是问题的原因,因为我注释掉了对这个方法的调用,程序确实按照预期运行

引起