android.view.ViewRoot$CalledFromWrongThreadException:

2024-01-08

我的 logcat 中出现错误,指出:

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: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你有

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

        }

The In tryagain你有

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

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

您还应该重新考虑您的设计。如果你有setContentView在同一活动中不止一次地重新考虑您的设计。

另外,用一个 try 块和多个 catch 块代替多个 try 块。

不确定您想要什么,但您正在打电话publishProgress不止一次。

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

android.view.ViewRoot$CalledFromWrongThreadException: 的相关文章

随机推荐

  • Deflate压缩块的结构

    我在理解 Deflate 算法时遇到困难 RFC 1951 https www rfc editor org rfc rfc1951 TL DR如何解析Deflate压缩块4be4 0200 我创建了一个包含字母和换行符的文件a n在里面
  • 我应该在 Objective C 中哪里初始化变量?

    在 Objective C 中 我应该覆盖 init 方法来初始化我的变量吗 如果变量是属性 我仍然可以通过通常的方式访问它们来设置其初始值吗 在 Objective C 中 我应该覆盖 init 方法来初始化我的变量吗 是的 具体来说 指
  • Rails 3“最后”方法从 ActiveRecord 输出返回错误结果

    我的控制器中有以下代码 items Item where user id gt 1 order updated at DESC limit 2 oldest item items last 出于某种原因 我猜测这与我最近升级到 Rails
  • 缓存控制的默认值是多少?

    我的问题是 有时浏览器会过度缓存某些资源 即使我已经修改了它们 但F5之后一切都很好 我整个下午都在研究这个案例 现在我完全理解了 Last Modified 或 Cache Control 的意义 我知道如何解决我的问题issue 只是
  • 如何使用 sed 删除从第一行开始到遇到模式 '[ERROR] -17-12-2015' 之前的行?

    我需要在遇到模式 ERROR 17 12 2015 之前删除从第一行到该行的行 目前我正在尝试以下命令 但不幸的是它没有找到模式本身 sed 1 ERROR 17 12 2015 d errLog 这里有什么问题吗 其次 上面的脚本还将删除
  • 如何在python中添加换行符?

    我刚刚用 python 编写了一个程序 但输出中的语句彼此太接近 那么如何在 python 中的两个语句之间添加换行符呢 您可以打印新行字符 print n numlines
  • Kafka 的 session.timeout.ms 和 max.poll.interval.ms 之间的区别

    AFAIK max poll interval ms 是在 Kafka 0 10 1 中引入的 然而 目前还不清楚什么时候我们可以同时使用 session timeout ms 和 max poll interval ms 考虑这样的用例
  • 从日期集合中查找平均日期 (Ruby)

    我有一个猜测表 每个猜测中都只有一个日期 我想知道如何将两个或多个日期转化为平均值 div 类似这样 但显然 Ruby 不允许我划分这两个日期 日期有点难用 你应该使用时间 尝试将日期转换为时间 require time foo time
  • 应用程序运行时 Xcode 4.5 选项卡消失

    更新 看起来每当 Xcode 4 5 开始运行应用程序时 查看 gt 隐藏选项卡栏 命令都会自动执行 这确实看起来像一个错误 这个单词tabs在这个问题中指的是我们在顶部看到的那个Xcode集成开发环境 不是 Cocoa Touch 中的标
  • 多个读取器和多个写入器(我的意思是多个)同步

    我正在开发一项功能 需要一种读 写锁的变体 该变体可以允许并发多个写入者 标准读 写锁允许多个读取器或单个写入器同时运行 我需要一个可以同时允许多个读者或多个作者的变体 因此 它永远不应该允许读者和作者同时存在 但是 可以同时允许多个作者或
  • 云计算和网格计算有什么区别? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 之间有哪些显着差异云计算 and 网格计算 两者的精确定义和目标应用领域是什么 我正在寻找概念见解和技术细节 Like 微软Azure是一个云操作系统
  • 如何获取 JavaFX 应用程序中的主 Stage?

    是否可以在正在运行的 JavaFX 应用程序中获取对主 Stage 的引用 这个问题的背景是我想编写一个库来操作另一种语言 Prolog 的JavaFX接口 为了做到这一点 我的图书馆需要访问主舞台 目标是 JavaFX 应用程序的程序员不
  • 如何在 Android 中从一组图像创建视频?

    我想调用一个函数并从图像列表中构建视频 然后将其保存在设备本地 public void CreateAndSaveVideoFile List
  • 如何比较两个 UNIX 命令的输出以找出差异?

    我不想创建新文件 我想完成类似的事情 cmd1 gt a cmd2 gt b cat a b b sort uniq u 但不使用文件 a 和 b Unix 实用程序通常是面向文件的 因此没有什么能完全满足您的需求 但是 zsh 可以使用以
  • ggplot2按常数因子进行轴变换

    在 ggplot2 密度图 geom 密度 中 我有以下 y 轴标签 0 000 0 005 0 010 0 015 0 020 将它们更改为类似的正确方法是什么 0 5 10 15 20 可能会自动在标签上添加 10 3 x 密度 过去
  • 如何将 ScrollView 与嵌套的 FlatList 一起使用?

    在主屏幕中 我有 3 个 FlatList 和一些其他视图的 其他数据 那么我应该将它包装在 ScrollView 中 这样我就可以滚动查看其他数据等等 但是当我用scrollView包装FlatList时我收到了这个警告 Virtuali
  • Firebase 自定义域名

    I m having a lot of trouble configuring my custom domain Currently if you go to my site www mydomain com it redirects to
  • 将 android EditText 样式从矩形边框更改为下划线

    在我的一项活动中 我的 EditText 视图过去看起来像这样 但现在他们看起来像这样 我需要帮助将其改回来 从矩形到下划线 背景 因为我需要创建一个自定义 ActionBar 所以我必须更改相关活动的主题 YesterdayActivit
  • 在实例变量中使用 ThreadLocal

    Do Java ThreadLocal如果变量用作实例变量 则它们会生成线程局部值 例如 在生成线程本地对象的方法中 或者它们必须始终是静态的吗 作为一个例子 假设一个典型的场景 其中几个初始化非线程安全类的对象的成本很高 需要在单个静态初
  • android.view.ViewRoot$CalledFromWrongThreadException:

    我的 logcat 中出现错误 指出 java net UnknownHostException apps example com 09 13 14 57 28 970 W System err 3823 android view View