android.view.ViewRoot $ CalledFromWrongThreadException: [英] android.view.ViewRoot$CalledFromWrongThreadException:

查看:170
本文介绍了android.view.ViewRoot $ CalledFromWrongThreadException:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到一个错误在我的logcat中指出:

 的java.net.UnknownHostException:apps.example.com
09-13 14:57:28.970:W / System.err的(3823):android.view.ViewRoot $ CalledFromWrongThreadException:只有创建视图层次可以触摸其观点原来的线程。
 

有没有人见过这个?我不知道究竟是什么导致了问题。

FULL logcat的:

  09-13 14:57:27.085:D / dalvikvm(3823):GC_EXTERNAL_ALLOC释放46K,43%免费3084K / 5379K,外部0K / 0K,暂停77ms
09-13 14:57:27.165:D / dalvikvm(3823):GC_EXTERNAL_ALLOC释放1K,43%免费3084K / 5379K,外部1K / 513K,暂停71ms
09-13 14:57:27.285:D / dalvikvm(3823):GC_EXTERNAL_ALLOC释放5K,43%免费3091K / 5379K,外部2167K / 2538K,暂停64ms的
09-13 14:57:27.290:我/的System.out(3823):辛State5
09-13 14:57:27.300:D /网络可用性(3823):关连
09-13 14:57:27.300:D /网络可用性(3823):的NetworkInfo:类型:WIFI [],状态:连接/关连,原因是:(未指定),额外的:(无),漫游:假故障转移:假的,isAvailable:真
09-13 14:57:27.375:D /剪贴板(3823):隐藏剪贴板对话框,在开始输入:由别人完成了...!
09-13 14:57:28.765:D / MDN(3823):3055861092
09-13 14:57:28.770:我/的System.out(3823):MDN%1234 = 768
09-13 14:57:28.770:我/的System.out(3823):MDN / 1234 = 2476386
09-13 14:57:28.770:D / ICCID(3823):8901260832120867967
09-13 14:57:28.770:我/的System.out(3823):ICCID%1234 = 587
09-13 14:57:28.770:我/的System.out(3823):ICCID / 1234 = 7213339410146570
09-13 14:57:28.815:D / dalvikvm(3823):GC_EXTERNAL_ALLOC释放20K,42%免费3129K / 5379K,外部2664K / 3205K,暂停38ms
09-13 14:57:28.855:I /网址...(3823):https://apps.example.com/REST/phoneSettings
09-13 14:57:28.885:V / httpPost(3823):org.apache.http.client.methods.HttpPost@40538058
09-13 14:57:28.970:E / DataSettings(3823):的java.net.UnknownHostException:apps.example.com
09-13 14:57:28.970:W / System.err的(3823):android.view.ViewRoot $ CalledFromWrongThreadException:只有创建视图层次可以触摸其观点原来的线程。
09-13 14:57:28.970:W / System.err的(3823):在android.view.ViewRoot.checkThread(ViewRoot.java:3088)
09-13 14:57:28.970:W / System.err的(3823):在android.view.ViewRoot.requestLayout(ViewRoot.java:669)
09-13 14:57:28.970:W / System.err的(3823):在android.view.View.requestLayout(View.java:8406)
09-13 14:57:28.980:W / System.err的(3823):在android.view.View.requestLayout(View.java:8406)
09-13 14:57:28.980:W / System.err的(3823):在android.view.ViewGroup.removeAllViews(ViewGroup.java:2261)
09-13 14:57:28.980:W / System.err的(3823):在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:213)
09-13 14:57:28.980:W / System.err的(3823):在android.app.Activity.setContentView(Activity.java:1663)
09-13 14:57:28.980:W / System.err的(3823):在com.project.example.app.UpdateActivity.tryagain(UpdateActivity.java:654)
09-13 14:57:28.980:W / System.err的(3823):在com.project.example.app.UpdateActivity $ NetworkTask.getQueryResults(UpdateActivity.java:569)
09-13 14:57:28.980:W / System.err的(3823):在com.project.example.app.UpdateActivity $ NetworkTask.doInBackground(UpdateActivity.java:382)
09-13 14:57:28.980:W / System.err的(3823):在com.project.example.app.UpdateActivity $ NetworkTask.doInBackground(UpdateActivity.java:1)
09-13 14:57:28.980:W / System.err的(3823):在android.os.AsyncTask $ 2.call(AsyncTask.java:185)
09-13 14:57:28.980:W / System.err的(3823):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:306)
09-13 14:57:28.980:W / System.err的(3823):在java.util.concurrent.FutureTask.run(FutureTask.java:138)
09-13 14:57:28.980:W / System.err的(3823):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
09-13 14:57:28.980:W / System.err的(3823):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:581)
09-13 14:57:28.980:W / System.err的(3823):在java.lang.Thread.run(Thread.java:1019)
09-13 14:57:34.089:V ​​/在分析器(3823):现在
09-13 14:57:34.089:W / System.err的(3823):org.xml.sax.SAXException:没有指定的输入。
09-13 14:57:34.100:W / System.err的(3823):在org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:285)
09-13 14:57:34.100:W / System.err的(3823):在com.project.example.app.XmlParserHandlerFinal.getQueryResponse(XmlParserHandlerFinal.java:170)
09-13 14:57:34.100:W / System.err的(3823):在com.project.example.app.UpdateActivity $ NetworkTask.success(UpdateActivity.java:598)
09-13 14:57:34.105:W / System.err的(3823):在com.project.example.app.UpdateActivity $ NetworkTask.onPostExecute(UpdateActivity.java:590)
09-13 14:57:34.105:W / System.err的(3823):在com.project.example.app.UpdateActivity $ NetworkTask.onPostExecute(UpdateActivity.java:1)
09-13 14:57:34.105:W / System.err的(3823):在android.os.AsyncTask.finish(AsyncTask.java:417)
09-13 14:57:34.105:W / System.err的(3823):在android.os.AsyncTask.access $ 300(AsyncTask.java:127)
09-13 14:57:34.105:W / System.err的(3823):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:429)
09-13 14:57:34.105:W / System.err的(3823):在android.os.Handler.dispatchMessage(Handler.java:99)
09-13 14:57:34.105:W / System.err的(3823):在android.os.Looper.loop(Looper.java:130)
09-13 14:57:34.105:W / System.err的(3823):在android.app.ActivityThread.main(ActivityThread.java:3691)
09-13 14:57:34.105:W / System.err的(3823):在java.lang.reflect.Method.invokeNative(本机方法)
09-13 14:57:34.105:W / System.err的(3823):在java.lang.reflect.Method.invoke(Method.java:507)
09-13 14:57:34.105:W / System.err的(3823):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:907)
09-13 14:57:34.105:W / System.err的(3823):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
09-13 14:57:34.105:W / System.err的(3823):在dalvik.system.NativeStart.main(本机方法)
09-13 14:57:34.174:I / dalvikvm(3823):未能解决LCOM /项目/例子/ APP / NotificationActivityForMultiProf;接口26'Landroid /内容/ ClipboardManager $ OnPrimaryClipChangedListener;'
09-13 14:57:34.174:W / dalvikvm(3823):类的链接LCOM /工程/例子/ APP / NotificationActivityForMultiProf;失败
09-13 14:57:34.174:E / dalvikvm(3823):找不到类的com.project.example.app.NotificationActivityForMultiProf,从法com.project.example.app.ConfigFinalActivity.showNotification引用
09-13 14:57:34.174:W / dalvikvm(3823):VFY:无法解析常量级561(LCOM /项目/例子/ APP / NotificationActivityForMultiProf;)在LCOM /项目/例子/ APP / ConfigFinalActivity;
09-13 14:57:34.174:D / dalvikvm(3823):VFY:在0x004b更换运code为0x1C
09-13 14:57:34.174:D / dalvikvm(3823):VFY:死code 0x004d-007F在LCOM /项目/例子/ APP / ConfigFinalActivity; .showNotification()V
09-13 14:57:36.494:W / KeyCharacterMap(3823):没有键盘ID 0
09-13 14:57:36.494:W / KeyCharacterMap(3823):使用默认的键盘对应:/system/usr/keychars/qwerty.kcm.bin
09-13 14:57:36.785:D /剪贴板(3823):隐藏剪贴板对话框,在开始输入:由别人完成了...!
 

来源:

  // AsyncTask的调用Web服务
    公共类NetworkTask扩展的AsyncTask<字符串,整数,为InputStream> {

        @覆盖
        在preExecute保护无效(){
            super.on preExecute();
            //
        }

        @覆盖
        受保护的InputStream doInBackground(字符串... PARAMS){
            INT结果为0;

            {
                Log.i(网址...,BASE_URL);

                尝试 {
                    流= getQueryResults(BASE_URL);
                }赶上(SocketTimeoutException如果E1){
                    // TODO自动生成的catch块
                    e1.printStackTrace();
                }赶上(异常SSLException E1){
                    // TODO自动生成的catch块
                    e1.printStackTrace();
                }赶上(IOException异常E1){
                    // TODO自动生成的catch块
                    e1.printStackTrace();
                }赶上(的SAXException E1){
                    // TODO自动生成的catch块
                    e1.printStackTrace();
                }赶上(例外E1){
                    // TODO自动生成的catch块
                    e1.printStackTrace();
                }
                //将code以下起着ST促销动画
                显示更新成功或失败消息//之前
                为(中间体增量= 0;增量2;增量++){
                    //睡眠1/2秒
                    //调用UI改变更新文字显示1点
                    //并增加水平,减少限幅的量
                    // 和
                    //慢慢揭示的手图像
                    publishProgress(R.drawable.loading_full,
                            R.drawable.loading_empty,R.drawable.loading_empty,
                            R.drawable.loading_empty,R.drawable.loading_empty);
                    尝试 {
                        视频下载(500);
                    }赶上(InterruptedException异常E){
                        // TODO自动生成的catch块

                    }
                    publishProgress(R.drawable.loading_full,
                            R.drawable.loading_full,R.drawable.loading_empty,
                            R.drawable.loading_empty,R.drawable.loading_empty);
                    尝试 {
                        视频下载(500);
                    }赶上(InterruptedException异常E){
                        // TODO自动生成的catch块

                    }
                    publishProgress(R.drawable.loading_full,
                            R.drawable.loading_full,R.drawable.loading_full,
                            R.drawable.loading_empty,R.drawable.loading_empty);
                    尝试 {
                        视频下载(500);
                    }赶上(InterruptedException异常E){
                        // TODO自动生成的catch块

                    }
                    publishProgress(R.drawable.loading_full,
                            R.drawable.loading_full,R.drawable.loading_full,
                            R.drawable.loading_full,R.drawable.loading_empty);
                    尝试 {
                        视频下载(500);
                    }赶上(InterruptedException异常E){
                        // TODO自动生成的catch块

                    }
                    publishProgress(R.drawable.loading_full,
                            R.drawable.loading_full,R.drawable.loading_full,
                            R.drawable.loading_full,R.drawable.loading_full);

                    //睡眠1/2秒
                    尝试 {
                        视频下载(500);
                    }赶上(InterruptedException异常E){
                        // TODO自动生成的catch块

                    }
                }

                    返回流;
            }


        }
        / *
         *将查询发送到服务器和回来的分析结果捆绑
         * urlQueryString  -  URL调用web服务
         * /
        保护同步的InputStream getQueryResults(字符串urlQueryString)
                抛出IOException异常,SAXException中,异常SSLException,
                SocketTimeoutException如果,异常{
            尝试 {
                // HttpsURLConnection HTTPS = NULL;
                字符串的uri = urlQueryString;

                名单<的NameValuePair> namevaluepairs中=新的ArrayList<的NameValuePair>();
                BasicNameValuePair mdn1,mdn2,ID1,ID2;
                如果(MDN.equals()){
                    mdn1 =新BasicNameValuePair(mdn1,NULL);
                    mdn2 =新BasicNameValuePair(mdn2,NULL);
                } 其他 {
                    mdn1 =新BasicNameValuePair(mdn1,mdN1.toString());
                    mdn2 =新BasicNameValuePair(mdn2,mdN2.toString());

                }

                BasicNameValuePair车=新BasicNameValuePair(汽车,汽车);
                如果(ICCID.equals()){
                     ID1 =新BasicNameValuePair(ID1,NULL);
                     ID2 =新BasicNameValuePair(ID2,NULL);
                } 其他 {
                     ID1 =新BasicNameValuePair(ID1,
                            iD1.toString());
                     ID2 =新BasicNameValuePair(ID2
                            iD2.toString());
                }

                nameValuePairs.add(mdn1);
                nameValuePairs.add(mdn2);
                nameValuePairs.add(车);
                nameValuePairs.add(ID1);
                nameValuePairs.add(ID2);

                UrlEn codedFormEntity urlEn codedFormEntity =新UrlEn codedFormEntity(
                        namevaluepairs中,ISO-8859-1);
                密钥库的trustStore = KeyStore.getInstance(密钥库
                        .getDefaultType());
                trustStore.load(NULL,NULL);

                SSLSocketFactory的SF =新MySSLSocketFactory(的trustStore);
                sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

                的HttpParams PARAMS =新BasicHttpParams();
                HttpProtocolParams.setVersion(参数,可以HttpVersion.HTTP_1_1);
                HttpProtocolParams.setContentCharset(参数,可以HTTP.UTF_8);

                SchemeRegistry注册表=新SchemeRegistry();
                registry.register(新计划(HTTP,PlainSocketFactory
                        .getSocketFactory(),80));
                registry.register(新计划(https开头,SF,443));

                ClientConnectionManager CCM =新ThreadSafeClientConnManager(
                        参数,可以登记);

                HttpClient的HttpClient的=新DefaultHttpClient(CCM,则params);
                PARAMS = httpClient.getParams();
                HttpClientParams.setRedirecting(参数,可以真正的);

                HttpPost httpPost =新HttpPost(URI);
                httpPost.addHeader(授权,
                        getB64Auth(nmundru,ABC123));

                httpPost.setHeader(内容类型,text / plain的;字符集= UTF-8);

                Log.v(httpPost,httpPost.toString());

                httpPost.setEntity(urlEn codedFormEntity);
                HTT presponse HTT presponse = httpClient.execute(httpPost);
                的System.out.println(回应......+ HTT presponse.toString());
                Log.v(回应......,HTT presponse.toString());

                流= HTT presponse.getEntity()的getContent()。

                //保存的InputStream在一个文件中

                尝试 {

                    FileOutputStream中FOUT = openFileOutput(settings.xml中,
                            Context.MODE_WORLD_READABLE);

                    在的DataInputStream =新的DataInputStream(流);
                    的BufferedReader BR =新的BufferedReader(
                            新的InputStreamReader(在));
                    字符串strLine中;
                    而((strLine中= br.readLine())!= NULL){
                         的System.out.println(strLine中); //打印响应
                        //在logcat的
                        fOut.write(strLine.getBytes());

                    }
                    fOut.close();

                }赶上(FileNotFoundException异常E){
                    e.printStackTrace();
                }赶上(IOException异常E){
                    e.printStackTrace();
                }

                FIS = openFileInput(的settings.xml);

            }赶上(例外五){
                Log.e(LOG_TAG,e.toString());
                再试一次();

            } 最后 {
                // https.disconnect();
            }

            返回流;
        }

        私人字符串getB64Auth(字符串登录,字符串传递){
            字符串源=登录+:+通过;
            字符串RET =基本法
                    + Base64.en codeToString(source.getBytes(),Base64.URL_SAFE
                            | Base64.NO_WRAP);
            返回RET;
        }
        @覆盖
        保护无效onPostExecute(InputStream的流){
            super.onPostExecute(流);
            //这种方法被称为解析响应并保存
            //的ArrayList
            成功();

        }

        公共无效成功(){

            //解析响应
            尝试 {
                handler.getQueryResponse(FIS);
            }赶上(的SAXException E){
                // TODO自动生成的catch块
                e.printStackTrace();
            }赶上(IOException异常E){
                // TODO自动生成的catch块
                e.printStackTrace();
            }

            //一套方法来保存ArryaLists从解析器
            setArrayList();
            意图I =新的意图(UpdateActivity.this,ConfigFinalActivity.class);
            startActivity(ⅰ);
            完();

        }
        //对应publishProgress呼叫框架UI线程的方法
        //工作者线程
        保护无效onProgressUpdate(整数...进度){
            //调用函数来更新图像视图
            setProgressImgView(进展[0],进步[1],进步[2]
                    进展[3],进展[4]);
        }

    }

    私人无效setProgressImgView(整数imgViewId1,整数imgViewId2,
            整数imgViewId3,整数imgViewId4,整数imgViewId5){
        与更新点//更新图像视图
        //重置视图布局的情况下,定向,同时更新
        的setContentView(R.layout.updating);
        mProgressImageview1 =(ImageView的)findViewById(R.id.loading_empty1);
        mProgressImageview2 =(ImageView的)findViewById(R.id.loading_empty2);
        mProgressImageview3 =(ImageView的)findViewById(R.id.loading_empty3);
        mProgressImageview4 =(ImageView的)findViewById(R.id.loading_empty4);
        mProgressImageview5 =(ImageView的)findViewById(R.id.loading_empty5);
        mProgressImageview1.setImageResource(imgViewId1);
        mProgressImageview2.setImageResource(imgViewId2);
        mProgressImageview3.setImageResource(imgViewId3);
        mProgressImageview4.setImageResource(imgViewId4);
        mProgressImageview5.setImageResource(imgViewId5);


    }

    @覆盖
    保护无效onRestart(){
        super.onRestart();

        如果(mErrorAlert!= NULL)
            mErrorAlert.dismiss();
    }

    公共无效TRYAGAIN(){
        //显示最终布局的pre-ICS自动设置失败后
        //更新
        的setContentView(R.layout.tryagain);
        字符串tryAgainText =;
        CharSequence的styledTryAgainText;

        tryAgainText =的String.Format(的getString(R.string.tryagain_text1)
                TotalSteps);
        styledTryAgainText = Html.fromHtml(tryAgainText);
        TextView的tryAgain1 =(TextView中)findViewById(R.id.tryagain_text1);
        tryAgain1.setText(styledTryAgainText);

        tryAgainText =的String.Format(的getString(R.string.tryagain_text2)
                TotalSteps);
        styledTryAgainText = Html.fromHtml(tryAgainText);
        TextView的tryAgain2 =(TextView中)findViewById(R.id.tryagain_text2);
        tryAgain2.setText(styledTryAgainText);

        tryAgainText =的String.Format(的getString(R.string.tryagain_text3)
                TotalSteps);
        styledTryAgainText = Html.fromHtml(tryAgainText);
        TextView的tryAgain3 =(TextView中)findViewById(R.id.tryagain_text3);
        tryAgain3.setText(styledTryAgainText);

    }
    私人无效assistUpdate(){
        //显示pre-ICS自动设置更新后的最终布局
        的setContentView(R.layout.assist_update);
        assist_update_btn =(按钮)findViewById(R.id.assist_update_btn);
        assist_update_btn.setOnClickListener((OnClickListener)本);

    }

    公共无效成功(){

        //解析响应
        尝试 {
            handler.getQueryResponse(FIS);
        }赶上(的SAXException E){
            // TODO自动生成的catch块
            e.printStackTrace();
        }赶上(IOException异常E){
            // TODO自动生成的catch块
            e.printStackTrace();
        }

        //一套方法来保存ArryaLists从解析器
        setArrayList();
        意图I =新的意图(这一点,ConfigFinalActivity.class);
        startActivity(ⅰ);
        完();

    }

    公共字符串的getResult(){

        返回结果;
    }

}
 

解决方案

 受保护的InputStream doInBackground(字符串... PARAMS)
 

 流= getQueryResults(BASE_URL);
 

然后在 getQueryResults

 赶上(例外五){
            Log.e(LOG_TAG,e.toString());
            再试一次();

        }
 

本在 TRYAGAIN

 公共无效TRYAGAIN(){
    的setContentView(R.layout.tryagain);
 

您无法更新从后台线程/访问UI。这就是为什么你得到那个例外。

你也应该重新考虑你的设计。如果你有的setContentView 不止一次在同一个活动重新考虑你的设计。

也多发,而不是try块有一个try块和多个catch块。

不知道你想要什么,但你调用 publishProgress 不止一次。

I'm getting an error in my logcat stating:

java.net.UnknownHostException: apps.example.com
09-13 14:57:28.970: W/System.err(3823): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Has anyone seen this before? I'm not sure exactly what's causing the issue.

FULL LOGCAT:

09-13 14:57:27.085: D/dalvikvm(3823): GC_EXTERNAL_ALLOC freed 46K, 43% free 3084K/5379K, external 0K/0K, paused 77ms
09-13 14:57:27.165: D/dalvikvm(3823): GC_EXTERNAL_ALLOC freed 1K, 43% free 3084K/5379K, external 1K/513K, paused 71ms
09-13 14:57:27.285: D/dalvikvm(3823): GC_EXTERNAL_ALLOC freed 5K, 43% free 3091K/5379K, external 2167K/2538K, paused 64ms
09-13 14:57:27.290: I/System.out(3823): Sim State5
09-13 14:57:27.300: D/Network Availability(3823): CONNECTED
09-13 14:57:27.300: D/Network Availability(3823): NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
09-13 14:57:27.375: D/CLIPBOARD(3823): Hide Clipboard dialog at Starting input: finished by someone else... !
09-13 14:57:28.765: D/MDN(3823): 3055861092
09-13 14:57:28.770: I/System.out(3823): MDN%1234 = 768
09-13 14:57:28.770: I/System.out(3823): MDN/1234 = 2476386
09-13 14:57:28.770: D/ICCID(3823): 8901260832120867967
09-13 14:57:28.770: I/System.out(3823): ICCID%1234 = 587
09-13 14:57:28.770: I/System.out(3823): ICCID/1234 = 7213339410146570
09-13 14:57:28.815: D/dalvikvm(3823): GC_EXTERNAL_ALLOC freed 20K, 42% free 3129K/5379K, external 2664K/3205K, paused 38ms
09-13 14:57:28.855: I/url...(3823): https://apps.example.com/REST/phoneSettings
09-13 14:57:28.885: V/httpPost(3823): org.apache.http.client.methods.HttpPost@40538058
09-13 14:57:28.970: E/DataSettings(3823): java.net.UnknownHostException: apps.example.com
09-13 14:57:28.970: W/System.err(3823): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
09-13 14:57:28.970: W/System.err(3823):     at android.view.ViewRoot.checkThread(ViewRoot.java:3088)
09-13 14:57:28.970: W/System.err(3823):     at android.view.ViewRoot.requestLayout(ViewRoot.java:669)
09-13 14:57:28.970: W/System.err(3823):     at android.view.View.requestLayout(View.java:8406)
09-13 14:57:28.980: W/System.err(3823):     at android.view.View.requestLayout(View.java:8406)
09-13 14:57:28.980: W/System.err(3823):     at android.view.ViewGroup.removeAllViews(ViewGroup.java:2261)
09-13 14:57:28.980: W/System.err(3823):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:213)
09-13 14:57:28.980: W/System.err(3823):     at android.app.Activity.setContentView(Activity.java:1663)
09-13 14:57:28.980: W/System.err(3823):     at com.project.example.app.UpdateActivity.tryagain(UpdateActivity.java:654)
09-13 14:57:28.980: W/System.err(3823):     at com.project.example.app.UpdateActivity$NetworkTask.getQueryResults(UpdateActivity.java:569)
09-13 14:57:28.980: W/System.err(3823):     at com.project.example.app.UpdateActivity$NetworkTask.doInBackground(UpdateActivity.java:382)
09-13 14:57:28.980: W/System.err(3823):     at com.project.example.app.UpdateActivity$NetworkTask.doInBackground(UpdateActivity.java:1)
09-13 14:57:28.980: W/System.err(3823):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-13 14:57:28.980: W/System.err(3823):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
09-13 14:57:28.980: W/System.err(3823):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
09-13 14:57:28.980: W/System.err(3823):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
09-13 14:57:28.980: W/System.err(3823):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
09-13 14:57:28.980: W/System.err(3823):     at java.lang.Thread.run(Thread.java:1019)
09-13 14:57:34.089: V/In the parser(3823): now
09-13 14:57:34.089: W/System.err(3823): org.xml.sax.SAXException: No input specified.
09-13 14:57:34.100: W/System.err(3823):     at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:285)
09-13 14:57:34.100: W/System.err(3823):     at com.project.example.app.XmlParserHandlerFinal.getQueryResponse(XmlParserHandlerFinal.java:170)
09-13 14:57:34.100: W/System.err(3823):     at com.project.example.app.UpdateActivity$NetworkTask.success(UpdateActivity.java:598)
09-13 14:57:34.105: W/System.err(3823):     at com.project.example.app.UpdateActivity$NetworkTask.onPostExecute(UpdateActivity.java:590)
09-13 14:57:34.105: W/System.err(3823):     at com.project.example.app.UpdateActivity$NetworkTask.onPostExecute(UpdateActivity.java:1)
09-13 14:57:34.105: W/System.err(3823):     at android.os.AsyncTask.finish(AsyncTask.java:417)
09-13 14:57:34.105: W/System.err(3823):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
09-13 14:57:34.105: W/System.err(3823):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
09-13 14:57:34.105: W/System.err(3823):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-13 14:57:34.105: W/System.err(3823):     at android.os.Looper.loop(Looper.java:130)
09-13 14:57:34.105: W/System.err(3823):     at android.app.ActivityThread.main(ActivityThread.java:3691)
09-13 14:57:34.105: W/System.err(3823):     at java.lang.reflect.Method.invokeNative(Native Method)
09-13 14:57:34.105: W/System.err(3823):     at java.lang.reflect.Method.invoke(Method.java:507)
09-13 14:57:34.105: W/System.err(3823):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
09-13 14:57:34.105: W/System.err(3823):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
09-13 14:57:34.105: W/System.err(3823):     at dalvik.system.NativeStart.main(Native Method)
09-13 14:57:34.174: I/dalvikvm(3823): Failed resolving Lcom/project/example/app/NotificationActivityForMultiProf; interface 26 'Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;'
09-13 14:57:34.174: W/dalvikvm(3823): Link of class 'Lcom/project/example/app/NotificationActivityForMultiProf;' failed
09-13 14:57:34.174: E/dalvikvm(3823): Could not find class 'com.project.example.app.NotificationActivityForMultiProf', referenced from method com.project.example.app.ConfigFinalActivity.showNotification
09-13 14:57:34.174: W/dalvikvm(3823): VFY: unable to resolve const-class 561 (Lcom/project/example/app/NotificationActivityForMultiProf;) in Lcom/project/example/app/ConfigFinalActivity;
09-13 14:57:34.174: D/dalvikvm(3823): VFY: replacing opcode 0x1c at 0x004b
09-13 14:57:34.174: D/dalvikvm(3823): VFY: dead code 0x004d-007f in Lcom/project/example/app/ConfigFinalActivity;.showNotification ()V
09-13 14:57:36.494: W/KeyCharacterMap(3823): No keyboard for id 0
09-13 14:57:36.494: W/KeyCharacterMap(3823): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
09-13 14:57:36.785: D/CLIPBOARD(3823): Hide Clipboard dialog at Starting input: finished by someone else... !

SOURCE:

    // AsyncTask to call web service
    public class NetworkTask extends AsyncTask<String, Integer, InputStream> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //
        }

        @Override
        protected InputStream doInBackground(String... params) {
            int result = 0;

            {
                Log.i("url...", Base_URL);

                try {
                    stream = getQueryResults(Base_URL);
                } catch (SocketTimeoutException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (SSLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (SAXException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                // The code below plays a ST Promo animation
                // prior to displaying update success or failure message
                for (int incr = 0; incr < 2; incr++) {
                    // Sleep for 1/2 second
                    // Invoke UI to change updating text to show 1 dot
                    // And Increasing the level to reduce the amount of clipping
                    // and
                    // slowly reveals the hand image
                    publishProgress(R.drawable.loading_full,
                            R.drawable.loading_empty, R.drawable.loading_empty,
                            R.drawable.loading_empty, R.drawable.loading_empty);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block

                    }
                    publishProgress(R.drawable.loading_full,
                            R.drawable.loading_full, R.drawable.loading_empty,
                            R.drawable.loading_empty, R.drawable.loading_empty);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block

                    }
                    publishProgress(R.drawable.loading_full,
                            R.drawable.loading_full, R.drawable.loading_full,
                            R.drawable.loading_empty, R.drawable.loading_empty);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block

                    }
                    publishProgress(R.drawable.loading_full,
                            R.drawable.loading_full, R.drawable.loading_full,
                            R.drawable.loading_full, R.drawable.loading_empty);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block

                    }
                    publishProgress(R.drawable.loading_full,
                            R.drawable.loading_full, R.drawable.loading_full,
                            R.drawable.loading_full, R.drawable.loading_full);

                    // Sleep for 1/2 second
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block

                    }
                }

                    return stream;
            }


        }
        /*
         * Sends a query to server and gets back the parsed results in a bundle
         * urlQueryString - URL for calling the webservice
         */
        protected synchronized InputStream getQueryResults(String urlQueryString)
                throws IOException, SAXException, SSLException,
                SocketTimeoutException, Exception {
            try {
                // HttpsURLConnection https = null;
                String uri = urlQueryString;

                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                BasicNameValuePair mdn1, mdn2,id1,id2;
                if (MDN.equals("")) {
                    mdn1 = new BasicNameValuePair("mdn1", null);
                    mdn2 = new BasicNameValuePair("mdn2", null);
                } else {
                    mdn1 = new BasicNameValuePair("mdn1", mdN1.toString());
                    mdn2 = new BasicNameValuePair("mdn2", mdN2.toString());

                }

                BasicNameValuePair car = new BasicNameValuePair("car", caR);
                if (ICCID.equals("")) {
                     id1 = new BasicNameValuePair("id1", null);
                     id2 = new BasicNameValuePair("id2", null);
                } else {
                     id1 = new BasicNameValuePair("id1",
                            iD1.toString());
                     id2 = new BasicNameValuePair("id2",
                            iD2.toString());
                }

                nameValuePairs.add(mdn1);
                nameValuePairs.add(mdn2);
                nameValuePairs.add(car);
                nameValuePairs.add(id1);
                nameValuePairs.add(id2);

                UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(
                        nameValuePairs, "ISO-8859-1");
                KeyStore trustStore = KeyStore.getInstance(KeyStore
                        .getDefaultType());
                trustStore.load(null, null);

                SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
                sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

                HttpParams params = new BasicHttpParams();
                HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
                HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

                SchemeRegistry registry = new SchemeRegistry();
                registry.register(new Scheme("http", PlainSocketFactory
                        .getSocketFactory(), 80));
                registry.register(new Scheme("https", sf, 443));

                ClientConnectionManager ccm = new ThreadSafeClientConnManager(
                        params, registry);

                HttpClient httpClient = new DefaultHttpClient(ccm, params);
                params = httpClient.getParams();
                HttpClientParams.setRedirecting(params, true);

                HttpPost httpPost = new HttpPost(uri);
                httpPost.addHeader("Authorization",
                        getB64Auth("nmundru", "abc123"));

                httpPost.setHeader("Content-Type", "text/plain; charset=utf-8");

                Log.v("httpPost", httpPost.toString());

                httpPost.setEntity(urlEncodedFormEntity);
                HttpResponse httpResponse = httpClient.execute(httpPost);
                System.out.println("response...." + httpResponse.toString());
                Log.v("response...", httpResponse.toString());

                stream = httpResponse.getEntity().getContent();

                // save the InputStream in a file

                try {

                    FileOutputStream fOut = openFileOutput("settings.xml",
                            Context.MODE_WORLD_READABLE);

                    DataInputStream in = new DataInputStream(stream);
                    BufferedReader br = new BufferedReader(
                            new InputStreamReader(in));
                    String strLine;
                    while ((strLine = br.readLine()) != null) {
                         System.out.println(strLine); //to print the response
                        // in logcat
                        fOut.write(strLine.getBytes());

                    }
                    fOut.close();

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                fis = openFileInput("settings.xml");

            } catch (Exception e) {
                Log.e(LOG_TAG, e.toString());
                tryagain();

            } finally {
                // https.disconnect();
            }

            return stream;
        }

        private String getB64Auth(String login, String pass) {
            String source = login + ":" + pass;
            String ret = "Basic "
                    + Base64.encodeToString(source.getBytes(), Base64.URL_SAFE
                            | Base64.NO_WRAP);
            return ret;
        }
        @Override
        protected void onPostExecute(InputStream stream) {
            super.onPostExecute(stream);
            // This method is called to parse the response and save the
            // ArrayLists
            success();

        }

        public void success() {

            // to parse the response
            try {
                handler.getQueryResponse(fis);
            } catch (SAXException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            // set method to save the ArryaLists from the parser
            setArrayList();
            Intent i = new Intent(UpdateActivity.this, ConfigFinalActivity.class);
            startActivity(i);
            finish();

        }
        // Framework UI thread method corresponding to publishProgress call in
        // worker thread
        protected void onProgressUpdate(Integer... progress) {
            // Call function to update image view
            setProgressImgView(progress[0], progress[1], progress[2],
                    progress[3], progress[4]);
        }

    }

    private void setProgressImgView(Integer imgViewId1, Integer imgViewId2,
            Integer imgViewId3, Integer imgViewId4, Integer imgViewId5) {
        // update image view with the updating dots
        // Reset view layout in case orientation while updating
        setContentView(R.layout.updating);
        mProgressImageview1 = (ImageView) findViewById(R.id.loading_empty1);
        mProgressImageview2 = (ImageView) findViewById(R.id.loading_empty2);
        mProgressImageview3 = (ImageView) findViewById(R.id.loading_empty3);
        mProgressImageview4 = (ImageView) findViewById(R.id.loading_empty4);
        mProgressImageview5 = (ImageView) findViewById(R.id.loading_empty5);
        mProgressImageview1.setImageResource(imgViewId1);
        mProgressImageview2.setImageResource(imgViewId2);
        mProgressImageview3.setImageResource(imgViewId3);
        mProgressImageview4.setImageResource(imgViewId4);
        mProgressImageview5.setImageResource(imgViewId5);


    }

    @Override
    protected void onRestart() {
        super.onRestart();

        if (mErrorAlert != null)
            mErrorAlert.dismiss();
    }

    public void tryagain() {
        // Displaying final layout after failure of pre-ICS automatic settings
        // update
        setContentView(R.layout.tryagain);
        String tryAgainText = "";
        CharSequence styledTryAgainText;

        tryAgainText = String.format(getString(R.string.tryagain_text1),
                TotalSteps);
        styledTryAgainText = Html.fromHtml(tryAgainText);
        TextView tryAgain1 = (TextView) findViewById(R.id.tryagain_text1);
        tryAgain1.setText(styledTryAgainText);

        tryAgainText = String.format(getString(R.string.tryagain_text2),
                TotalSteps);
        styledTryAgainText = Html.fromHtml(tryAgainText);
        TextView tryAgain2 = (TextView) findViewById(R.id.tryagain_text2);
        tryAgain2.setText(styledTryAgainText);

        tryAgainText = String.format(getString(R.string.tryagain_text3),
                TotalSteps);
        styledTryAgainText = Html.fromHtml(tryAgainText);
        TextView tryAgain3 = (TextView) findViewById(R.id.tryagain_text3);
        tryAgain3.setText(styledTryAgainText);

    }
    private void assistUpdate() {
        // Displaying final layout after pre-ICS automatic settings update
        setContentView(R.layout.assist_update);
        assist_update_btn = (Button) findViewById(R.id.assist_update_btn);
        assist_update_btn.setOnClickListener((OnClickListener) this);

    }

    public void success() {

        // to parse the response
        try {
            handler.getQueryResponse(fis);
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // set method to save the ArryaLists from the parser
        setArrayList();
        Intent i = new Intent(this, ConfigFinalActivity.class);
        startActivity(i);
        finish();

    }

    public String getResult() {

        return result;
    }

}

解决方案

In

       protected InputStream doInBackground(String... params)

You have

      stream = getQueryResults(Base_URL);

Then In getQueryResults you have

    catch (Exception e) {
            Log.e(LOG_TAG, e.toString());
            tryagain();

        }

The In tryagain you have

    public void tryagain() {
    setContentView(R.layout.tryagain);

You cannot update/access ui from a background thread. That is why you are getting that exception.

Also you should re consider your design. If you have setContentView more than once in the same activity re consider your design.

Also instead of mutiple try blocks have one try block and multiple catch blocks.

Not sure what you want but you are calling publishProgress more than once.

这篇关于android.view.ViewRoot $ CalledFromWrongThreadException:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆