java.lang.RuntimeException:执行 doInBackground() 时发生错误

2023-12-10

我正在使用下面的代码。 Android Studio 中出现错误。你能帮忙吗?根据我的理解,args[0] 没有填充一些值。这是为什么?如果 args[0] 没有选择任何值,则任何其他实现都可以。

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.DocumentsContract;
import android.renderscript.Element;
import android.util.Log;
import android.widget.TextView;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.ElementType;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

public class StockInfoActivity  extends Activity{
    private static final String TAG="StockQoute";

    static final String KEY_ITEM="quote";
    static final String KEY_YEAR_LOW="YearLow";
    static final String KEY_YEAR_HIGH="YearHigh";
    static final String KEY_DAYS_LOW="DaysLow";
    static final String KEY_DAYS_HIGH="DaysHigh";
    static final String KEY_CHANGE="Change";
    static final String KEY_LAST_TRADE="LastTradePriceOnly";
    static final String KEY_DAYS_CHANGE="DaysRange";

    TextView companyNameView;
    TextView yearLowView    ;
    TextView yearHighView   ;
    TextView daysLowView    ;
    TextView daysHighView   ;
    TextView LastPriceView  ;
    TextView changeView     ;
    TextView dailyPriceRangeView;

    String name="";
    String yearLow="";
    String yearHigh="";
    String daysLow="";
    String daysHigh="";
    String lastTradePrice="";
    String change="";
    String daysRange="";

    String yahooURLFirst="https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quote%20where%20symbol%20in%20(%22";
    String yahooURLSecond="%22)&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";

    protected void onCreate (Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        setContentView(R.layout.get_stock_qoute);
        Intent intent=getIntent();
        String stockSymbol=intent.getStringExtra(MainActivity.STOCK_SYMBOL);

        companyNameView =(TextView)findViewById(R.id.companyNameView);
        yearLowView =(TextView)findViewById(R.id.yearLow);
        yearHighView    =(TextView)findViewById(R.id.yearHigh);
        daysLowView =(TextView)findViewById(R.id.daysLow);
        daysHighView    =(TextView)findViewById(R.id.daysHigh);
        LastPriceView   =(TextView)findViewById(R.id.lastPrice);
        changeView      =(TextView)findViewById(R.id.change);
        dailyPriceRangeView =(TextView)findViewById(R.id.dailyPriceRange);
        //Log.d(TAG, "Before URL creation" + stockSymbol);
        final String yqlURL=yahooURLFirst+stockSymbol+yahooURLSecond;
       //Log.d(TAG, "Before URL creation" + yqlURL);
        new MyAsyncTask().execute();
    }

    private class MyAsyncTask extends AsyncTask<String,String,String>{

        protected String doInBackground(String... args) {
                try{
                    String newstr=args[0];
                    Log.d("Sync",newstr);
                    URL url= new URL(args[0]);

                    //Log.d("Sync1","We are here");
                    URLConnection conn=url.openConnection();

                    HttpURLConnection httpconn=(HttpURLConnection)conn;

                    int responseCode=httpconn.getResponseCode();

                    if(responseCode==HttpURLConnection.HTTP_OK){
                        InputStream in=httpconn.getInputStream();
                        DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
                        DocumentBuilder db=dbf.newDocumentBuilder();
                        Document dom=db.parse(in);
                        org.w3c.dom.Element docEl= (org.w3c.dom.Element) dom.getDocumentElement();
                        NodeList nl = docEl.getElementsByTagName("qoute");
                        Log.d("Sync3","We are here");
                        if(nl!=null && nl.getLength() > 0){
                            for(int i=0;i<=nl.getLength();i++){
                                StockInfo theStock=getStockInfo(docEl);
                                name=theStock.getName();
                                yearLow=theStock.getYearLow();
                                yearHigh=theStock.getYearHigh();
                                daysLow=theStock.getDaysLow();
                                daysHigh=theStock.getDaysHigh();
                                lastTradePrice=theStock.getLastTradePriceonly();
                                change=theStock.getChange();
                                daysRange=theStock.getDaysRange();
                            }
                        }
                    }

            } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (ParserConfigurationException e) {
                    e.printStackTrace();
                } catch (SAXException e) {
                    e.printStackTrace();
                }
finally {       }
            return null;
        }

        protected void onPostExecute(String result){
            companyNameView.setText(name);
            yearHighView.setText("Year High: " +yearHigh);
            yearLowView.setText("Year Low: "+yearLow);
            daysHighView.setText("Days High: "+daysHigh);
            daysLowView.setText("Days Low:"+ daysLow );
            LastPriceView.setText("Last Price"+ lastTradePrice);
            changeView.setText("Change: "+change);
            dailyPriceRangeView.setText("Daily Price Range: "+daysRange) ;
        }

private StockInfo getStockInfo(org.w3c.dom.Element entry){
    String stockName=getTextValue(entry,"Name");
    String stockYearLow=getTextValue(entry,"YearLow");
    String stockYearHigh=getTextValue(entry,"YearHigh");
    String stockDaysLow=getTextValue(entry,"DaysLow");
    String stockDaysHigh=getTextValue(entry,"DaysHigh");
    String stockLastTradePrice=getTextValue(entry,"LastTradePriceOnly");
    String stockChange=getTextValue(entry,"Change");
    String stockDaysRange=getTextValue(entry,"DaysRange");

    StockInfo theStock=new StockInfo(stockDaysLow
            ,stockDaysHigh  ,stockYearLow ,stockYearHigh ,stockName,stockLastTradePrice ,stockChange ,stockDaysRange);
return theStock;
}
private String getTextValue(org.w3c.dom.Element Entry, String tagName)
{
    String tagValueToReturn=null;
    NodeList nl=Entry.getElementsByTagName(tagName);
    if(nl!=null && nl.getLength() > 0){
        org.w3c.dom.Element ele=(org.w3c.dom.Element)nl.item(0);
        tagValueToReturn=ele.getFirstChild().getNodeValue();
        }
    return tagValueToReturn;
}
}
}

低于错误

FATAL EXCEPTION: AsyncTask #1
Process: com.shravan.stockinfo, PID: 2188
java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:304)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:818)
 Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=1
    at com.shravan.stockinfo.StockInfoActivity$MyAsyncTask.doInBackground(StockInfoActivity.java:89)
    at com.shravan.stockinfo.StockInfoActivity$MyAsyncTask.doInBackground(StockInfoActivity.java:85)
    at android.os.AsyncTask$2.call(AsyncTask.java:292)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:818) 

您正在运行AsyncTask like new MyAsyncTask().execute();这意味着您没有向它传递任何参数。

But in doInBackground您试图获取价值的方法String newstr=args[0];but args数组的长度为 0。

您需要启动AsycTask像这样的东西

new MyAsyncTask().execute(yqlURL);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.RuntimeException:执行 doInBackground() 时发生错误 的相关文章

  • 从数据库中删除项目后如何从 recyclerView 中删除项目

    我正在使用 recyclerView 来显示当用户单击每个项目的删除按钮时可以删除的项目列表 为了做到这一点 我使用了 recyclerview 适配器 我想要的是 从该 recycleView 适配器中 当用户单击某个项目的删除按钮时 会
  • Android Studio Profiler 中显示“无可调试进程”

    当我尝试在 Android Studio 中使用探查器时 我能够看到已连接的设备 但在探查器中收到 无可调试进程 有人可以帮助我为什么我收到 不可调试的进程 吗 您可以尝试以下任意 全部操作 使缓存失效并重新启动Android Studio
  • SQLite 中的 where 子句在 android 中不起作用:(

    当尝试在 SQLite 中查询某些数据时 我遇到了一个恼人的错误 这是我的代码 Cursor cursor db query TABLE IMAGES new String id name compareToThis null null n
  • 如何修复 Kotlin JobCancellationException?

    由于 Kotlin JobCancellationException 我发生了崩溃 以下是有关崩溃的详细信息 kotlinx coroutines JobCancellationException Job was cancelled job
  • 如何使用 Espresso 访问外部网站上的元素

    使用 espresso 我们单击 登录 按钮 该按钮将启动一个外部网站 Chrome 自定义选项卡 您可以在其中登录 然后重定向回我们的 Android 应用程序 Espresso 有没有办法 1 验证正在启动的 URL 是否正确2 访问网
  • 使用缩略图作为毕加索的占位符

    从用户体验的角度来看 首先向用户显示缩略图 直到真实图像完成加载 然后向他显示 这会很棒 但是Picasso https github com square picasso仅使用资源文件作为占位符 例如 Picasso with conte
  • 应用程序可能在其主线程上做了太多工作 - Android

    您好 我正在开发一个 Android 应用程序 当我尝试从我的应用程序发送电子邮件时遇到此错误 我在后台发送邮件而不使用基于意图这个链接 http www oodlestechnologies com blogs Send Mail in
  • 如何在 Android 中启用/禁用日志级别?

    例如 我有很多日志语句需要调试 Log v TAG Message here Log w TAG WARNING HERE 在设备电话上部署此应用程序时 我想关闭详细日志记录 我可以在其中启用 禁用日志记录 The Android 文档对日
  • Android 时间选择器在分钟滚动时自动更改小时

    例如 当我在 TimePicker 上滚动分钟时 在将分钟滚动到 59 后 小时会自动滚动到 7 因此新时间将为 07 59 同样的方式 如果我有 07 59 并且我将分钟滚动到 00 小时将自动滚动到 8 所以时间将是 08 00 此逻辑
  • Kotlin + Room:java.lang.IllegalArgumentException:void 无法转换为元素

    我试图在我的 Java Kotlin 项目中添加 Room 但是当我尝试编译该项目时 它失败了 app kaptDebugKotlin出现以下错误 e java lang IllegalStateException failed to an
  • 某些设备上的启动画面扭曲

    我在修复 Android 上的启动画面扭曲问题时遇到问题 我正在使用 React Native 请注意 这种情况仅发生在某些设备上 例如 我有一台 Android 版本为 4 2 2 的三星 启动画面不扭曲 而 Android 版本为 8
  • 使用 Backstack 时 TabLayout ViewPager 未加载 [重复]

    这个问题在这里已经有答案了 我在一个片段中使用 TabLayout 和 viewPager 在选项卡下方的两个片段之间切换 当我单击下部片段之一内的 FAB 时 我会加载一个新片段 用于输入 但是 当我按 后退 按钮时 TabLayout
  • 如何在具有多种字体大小的 TextView 中调整行高?

    我有一个包含 Spannable 字符串的 TextView 该字符串包含一堆文本 其中第一个单词的字体大小是字符串其余部分的两倍 问题在于 由于第一个字的大小增加 第一行和第二行之间的行间距比后续行之间的行间距大得多 http img s
  • 如何在 Android 上通过 RTMP 进行流式传输?

    我正在尝试在远程服务器上播放视频文件 视频格式为flv 服务器为Flash Media Server3 5 我将通过 RTMP 连接到服务器并使用 Android Media Player 实现视频文件的播放 真的吗 可能吗 任何帮助都是我
  • Osmdroid:如何从我自己的位图(图块)创建和加载地图?

    我开始使用 Osmdroid 我想使用这项技术来显示有关 F1 赛道的地图 我有一张大图片 我可以将它切割成更小的图块 我可以修改osmdroid库来上传这些图片吗 我想将这些位图 图块 保存在我的资产文件夹中 我非常不知道如何做到这一点
  • 等待视图通过 IdleResource 变得可见

    我正在使用 Espresso 2 2 编写仪器测试 我想测试的流程 测试点击的单选按钮 onClick 向 API 发起请求 每次不同时间我收到回复后 积极响应触发活动中调用的接口方法 onRequestSuccess 我正在屏幕上显示名为
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • 在 Android KitKat 中接收彩信

    所以这个视频Android 4 4 短信 API http www youtube com watch v mdq0R2WQssQ DevBytes 解释了 KitKat 中 SMS API 的最新变化 他们还提供了示例项目的链接 http
  • 加载带有月份标题的 recyclerview 不同类型适配器

    如果从 api 获取不同的月份名称 则尝试将月份名称显示为标题 在这里 我加载月份标题 但是当我加载标题时 它不会加载其他视图 如果数据不同 我需要将月份加载为标题 并且还加载其他视图持有者 我看到一些例子 他们都在 Model 类中使用
  • 具有通用类的自定义 Android 适配器

    我正在尝试在 Android 中创建一个通用适配器 所以我不能一遍又一遍地编写它 问题是 它正在工作 但它的回收效果不是很好 它显示了我想要的内容 但是当我滚动时 它的顺序不同 public class CustomListViewAdap

随机推荐