找不到值时 Android 应用程序崩溃

Posted

技术标签:

【中文标题】找不到值时 Android 应用程序崩溃【英文标题】:Android app crashes when value is not found 【发布时间】:2016-06-06 12:20:56 【问题描述】:

我正在尝试从 Yahoo! 获取货币值使用 Yahoo! 进行财务API 到我的 android 应用程序中。

但对于某些货币,没有找到导致我的应用程序崩溃的值。

如果没有找到任何值,它应该显示错误。

String s;
String exResult = "";
final String val[];
val  = getResources().getStringArray(R.array.value);
try 
    s = getJson("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22" + val[from] + val[to] + "%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=");
    JSONObject jObj;
    jObj = new JSONObject(s);
    exResult = jObj.getJSONObject("query").getJSONObject("results").getJSONObject("rate").getString("Rate");

    System.out.println(exResult);
 catch (JSONException e) 
    // TODO Auto-generated catch block
    e.printStackTrace();
 catch (ClientProtocolException e) 
    // TODO Auto-generated catch block
    e.printStackTrace();
 catch (IOException e) 
    // TODO Auto-generated catch block
    e.printStackTrace();

return exResult;

【问题讨论】:

请在此处粘贴您的崩溃日志。 你有什么问题? 在上面的链接中我没有看到"query"JSONObject,因为它显示errorJSONObject What is a Null Pointer Exception, and how do I fix it?的可能重复 【参考方案1】:

可能是因为使用了 getString() 方法, 只是在解析时使用 optString() 方法而不是 getString()

.getString("率"); --> .optString("率");

 /**
     * Returns the value mapped by @code name if it exists, coercing it if
     * necessary, or throws if no such mapping exists.
     *
     * @throws JSONException if no such mapping exists.
     */
    public String getString(String name) throws JSONException 
        Object object = get(name);
        String result = JSON.toString(object);
        if (result == null) 
            throw JSON.typeMismatch(name, object, "String");
        
        return result;
    

    /**
     * Returns the value mapped by @code name if it exists, coercing it if
     * necessary, or the empty string if no such mapping exists.
     */
    public String optString(String name) 
        return optString(name, "");
    

【讨论】:

以上是关于找不到值时 Android 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

应用程序崩溃可能是布局错误。我找不到它

在 Google Play 管理中心找不到崩溃报告

Flutter 在启动时崩溃:在路径 DexPathList 上找不到类 .MainActivity

在Android中更改区域设置后应用程序找不到资源

找不到 android NDK 堆栈跟踪

Android 10 - 找不到处理 Intent 的 Activity