AsyncTask OutputStream因少数设备而失败

时间:2018-01-22 08:42:08

标签: android android-asynctask

我的片段中有两个AsyncTasks。首先加载(AsyncTask1)初始数据集,然后另一个(AsyncTask2)加载后续数据,因为应用程序向下滚动。

这两项任务在模拟器(Pixel,Nexus设备)中完美运行。当我滚动第二个任务时无缝地加载新数据。

但是当我在Samsung Note 4,Samsung A5和另外一台设备上运行应用程序时,AsyncTask1正常工作,但AsyncTask2在下面一行后停止执行。我在Moto手机上试过它并且工作正常。

OutputStream outputStream1 = httpURLConnection.getOutputStream();

下面是我的AsyncTask2的doInBackground方法

@Override
    protected String doInBackground(Integer... args) {
        String arg_item_number = String.valueOf((args[0]*5));
        np_page = args[0];
        String arg_language;

        if (args[1]==1){
            arg_language = "en";
        }else{
            arg_language = "hi";
        }
        try {
            URL url1 = new URL(url_get_next_posts);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url1.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            OutputStream outputStream1 = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter1 = new BufferedWriter(new OutputStreamWriter(outputStream1,"UTF-8"));
            String data_string_language1 = URLEncoder.encode("item_number","UTF-8")+"="+URLEncoder.encode(arg_item_number,"UTF-8")
                    +"&"+URLEncoder.encode("selected_language","UTF-8")+"="+URLEncoder.encode(arg_language,"UTF-8");
            bufferedWriter1.write(data_string_language1);
            bufferedWriter1.flush();
            bufferedWriter1.close();
            outputStream1.close();

            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder stringBuilder = new StringBuilder();

            while ((JSON_NEXT_POST = bufferedReader.readLine()) != null) {
                stringBuilder.append(JSON_NEXT_POST + "\n");
            }
            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();

            return stringBuilder.toString().trim();

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

        return null;
    }

错误日志

I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
D/tag_item_count: 1
I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@8bda7dd time:13839484
I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
W/System.err: java.net.UnknownHostException: http:websitenname.com/script_url.php
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.createAddress(HttpEngine.java:1347)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:439)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:353)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:476)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:249)
W/System.err:     at com.app_name.android.app_name.PostTab$BackgroundNextPostsJSON.doInBackground(PostTab.java:374)
W/System.err:     at com.app_name.android.app_name.PostTab$BackgroundNextPostsJSON.doInBackground(PostTab.java:347)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err:     at java.lang.Thread.run(Thread.java:818)
I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
I/System.out: (HTTPLog)-Static: isSBSettingEnabled false

它可以与手机上运行的Android版本相关吗(注4运行6.0.1)?我不知道代码有什么问题,因为它实际上适用于模拟器和放大器。摩托手机。问题也可能出现在其他非三星设备上吗?

1 个答案:

答案 0 :(得分:1)

在你的堆栈跟踪中 http:websitenname.com/是无效的URL,因为它在url方案中缺少双斜杠。应该是http://websitenname.com/

它在模拟器和某些设备上工作可能是因为它们有一些未记录的改进,并尝试打开甚至无效的URL。