android中的截击给出消息执行时间太长错误

如何解决android中的截击给出消息执行时间太长错误

我是安卓新手,请帮我解决这个问题。

我正在通过 volley API 获取 JSON,但它在主线程上显示了太多工作。

一切正常,但在提出请求时没有任何反应。 我在代码文件下面提到了错误消息。 这与性能有关,但我不知道如何解决。请帮忙。

当我调试它时,我发现此后代码没有执行,

 JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,readyUrl,null,new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        JSONArray arr;
                        try {
                           arr = response.getJSONArray("weather");
                           JSONObject weatherObj = arr.getJSONObject(0);
                           String weather = weatherObj.getString("main");
                           String icon = weatherObj.getString("icon");
                           String iconUrl = "http://openweathermap.org/img/w/" + icon + ".png";
                           Picasso.with(getApplicationContext()).load(iconUrl).into(weatherImage);
                           textView.setText(weather);

                        } catch (JSONException e) {
                            e.printstacktrace();
                        }

                    }
                },new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                }
        ); // request Ends

MainActivity.java 文件

public class MainActivity extends AppCompatActivity {

 private ConstraintLayout constraintLayout;
 private Button button;
 private EditText editText;
 private ImageView weatherImage;
 private TextView textView;
 private RequestQueue requestQueue;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = findViewById(R.id.button);
        editText = findViewById(R.id.editTextTextPersonName);
        weatherImage = findViewById(R.id.imageView);
        textView = findViewById(R.id.textView2);
        constraintLayout = findViewById(R.id.constraintLayout);
        constraintLayout.setBackground(getDrawable(R.drawable.background));
        AnimationDrawable animationDrawable = (AnimationDrawable) constraintLayout.getBackground();
        animationDrawable.setExitFadeDuration(2000);
        animationDrawable.setEnterFadeDuration(2000);
        animationDrawable.start();

        button.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String city = editText.getText().toString();
                if(TextUtils.isEmpty(city)){
                    editText.setError("Please Enter City");
                    return;
                }

                getWeatherData(city);
            }
        });


    }//OnCreate Ends


    public void getWeatherData(String city){
        requestQueue = VolleySingleton.getmInstance(getApplicationContext()).getRequestQueue();
        String url = "http://api.openweathermap.org/data/2.5/weather?q=";
        String appId = "&appid=5d2019582a736b2323e5ae971940074a";
        String readyUrl = url + city + appId;

        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        JSONArray arr;
                        try {
                           arr = response.getJSONArray("weather");
                           JSONObject weatherObj = arr.getJSONObject(0);
                           String weather = weatherObj.getString("main");
                           String icon = weatherObj.getString("icon");
                           String iconUrl = "http://openweathermap.org/img/w/" + icon + ".png";
                           Picasso.with(getApplicationContext()).load(iconUrl).into(weatherImage);
                           textView.setText(weather);

                        } catch (JSONException e) {
                            e.printstacktrace();
                        }
                        
                    }
                },new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                }
        ); // request Ends

        requestQueue.add(request);

    }

}

调试时出现此错误

E/ANR_LOG: >>> msg's executing time is too long
    Blocked msg = { when=-52s106ms what=0 target=android.view.ViewRootImpl$ViewRootHandler callback=android.view.View$PerformClick },cost  = 52101 ms
    >>>Current msg List is:
E/ANR_LOG: Current msg <1>  = { when=-52s105ms what=0 target=android.view.ViewRootImpl$ViewRootHandler callback=android.view.View$UnsetpressedState }
E/ANR_LOG: Current msg <2>  = { when=-52s102ms what=0 target=android.view.ViewRootImpl$ViewRootHandler callback=android.widget.Editor$1 }
E/ANR_LOG: Current msg <3>  = { when=-52s97ms what=2 target=android.view.Choreographer$FrameHandler arg1=1 obj=android.graphics.drawable.DrawableContainer$1@8d85592 }
E/ANR_LOG: Current msg <4>  = { when=-51s787ms what=0 target=android.view.ViewRootImpl$ViewRootHandler callback=android.widget.Editor$Blink }
E/ANR_LOG: Current msg <5>  = { when=-48s881ms what=2 target=android.view.Choreographer$FrameHandler arg1=1 obj=android.graphics.drawable.AnimationDrawable@f1b1b63 }
    >>>CURRENT MSG DUMP OVER<<<

请建议应该怎么做。

解决方法

据我所知,您应该将 asynctask 用于长任务。您可以查看本教程以了解异步任务.. https://developer.android.com/codelabs/android-training-create-asynctask?index=..%2F..%2Fandroid-training#0。之后,您可以在 doInBackground 异步任务函数上使用 getWeatherData 函数。

,

只需将 android:usesCleartextTraffic="true" 放在清单文件中的应用程序标签中

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?