Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-缓慢启动新活动_Android_Json_Android Activity_Get_Http Get - Fatal编程技术网

android-缓慢启动新活动

android-缓慢启动新活动,android,json,android-activity,get,http-get,Android,Json,Android Activity,Get,Http Get,我项目中的第二个活动开始得很慢,我不知道如何修复它。它的工作原理(一切都在onCreate()中):首先,它确实使用json获取对页面的请求: try { DefaultHttpClient hc = new DefaultHttpClient(); ResponseHandler<String> res = new BasicResponseHandler(); HttpGet getMethod = new HttpGet(url)

我项目中的第二个活动开始得很慢,我不知道如何修复它。它的工作原理(一切都在onCreate()中):首先,它确实使用json获取对页面的请求:

try {
        DefaultHttpClient hc = new DefaultHttpClient();
        ResponseHandler<String> res = new BasicResponseHandler();
        HttpGet getMethod = new HttpGet(url);
        String response = hc.execute(getMethod, res);
        resStr = response.toString();
    } catch (Exception e) {
        System.out.println("Exp=" + e);
    }
也许我应该在填充数组之外创建一次json_数组,然后将它作为JSONArray传递给那些方法,而不是作为字符串——我不知道它是否会影响速度。 在ArrayAdapter中,一切似乎都很好,我使用的是ViewHolder,我的滚动非常出色。与开始活动不同


如何使其更好、更优化?

首先,不要在
onCreate()
中执行所有操作,而是在
onResume()中执行

其次,所有服务器调用都应该在后台线程中使用异步,并使用结果显示用户


如果您不想在
onResume()
onPause()
期间多次调用数据API,您可以使用数组中的数据结果或其他内容,当
onResume()
调用时,您可以检查它是否有数据,只需加载数据,或者从服务器获取数据。

您是否在主线程上进行网络调用?请不要这样做。而是在不同的线程上执行网络操作

对于网络,您可以使用库。
正如Gaurav所说,通过使用回调或使用RxJava中的可观察项,异步操作也很容易,问题在于网络请求是在主线程上调用的。 当你请求网络呼叫时,你的程序说:好的,停止,我等待响应。 所以如果你想改变这一点,你可以做很多事情。 例如,您可以将异步网络调用与lib(loopj lib)一起使用 或者你可以简单地打开一个线程:进行网络调用


这样,您的UI就不会冻结

在后台执行所有与网络相关的工作。您是否在第一次访问中添加了一些代码?您能帮我改装一下吗?我读了一些关于它的文章,但没有弄明白如何做。你可以在这里查看一些例子,或者是一些博客的例子,比如,你也可以帮助你。或者,您可以将代码共享到github/[任何其他git存储库],我也可以参与其中。
public static String GetWantedType(String resStr, int num) {
    String jsonvalues = "";
    try {
        JSONArray json_Array = new JSONArray(resStr);
        JSONObject json_data = json_Array.getJSONObject(num);
        jsonvalues = json_data.getString("wanted_type");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return jsonvalues;
}