Закрытое гнездо - Загружающий с API

То, что я делаю, должно загрузить список файлов с AsyncTask каждые X секунды:

Сначала получать список видео и изображений тогда я загружаю каждого из них. Все работает отлично.

package com.example.tvrplayer;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

public class updateFiles extends AsyncTask {

     public PlayerActivity activity;

     public updateFiles(PlayerActivity a) { activity = a;}



    @Override
    protected Long doInBackground(Object... params) {
        Context context = (Context) params[0];
        String username = (String) params[1];
        String linkid = (String) params[2];
        String apiurl = (String) params[3];

        JSONArray programs = Json.getJson(apiurl + "/rest/program/device/"+ linkid +"/"+ username +"/"+ activity.deviceid, "GET");
        File mediadir = context.getDir("tvr", Context.MODE_PRIVATE);
            try {
                LINE 44- for (int j=0; j < programs.length(); j++) { 

                    JSONObject json_data = programs.getJSONObject(j);
                    String name = json_data.getString("Name").toLowerCase();
                    name = name.replace("-", "_");
                    if (name.contains("mp4") || name.contains("m4v") || name.contains("png") || name.contains("jpg") || name.contains("jpeg")) {
                        String _name = name.replace("/", "");
                        File file = new File(mediadir, _name);
                        Log.i("FILE SIZE", ""+file.length());
                        if ( file.length() > 0 ) {
                            Log.i("FILE EXISTS", _name);
                        } else {
                            Log.i("START DOWNLOAD", _name);
                            new Download().execute(context, _name, apiurl + "/rest/transfer/"+ linkid +"/"+ username +"/" + json_data.getString("ID"));
                        }
                        Log.i("FILES found", ""+mediadir.listFiles().length);
                    }
                }
        } catch (JSONException e) {
            Log.e("JSON Exception", e.getMessage());
            e.printStackTrace();
        }
//      activity.filelist = mediadir.listFiles();
        return null;
    }

    @Override
    protected void onPostExecute(Long result) {}

}

Через некоторое время я получаю эту ошибку:

02-25 16:19:19.578: E/JSON - 2 -(17470): java.net.SocketException: Socket closed - http://192.168.2.136:8080/rest/program/device/123someasdidFoo123123/[email protected]/000

02-25 16:19:16.648: W/dalvikvm(17284): threadid=11: thread exiting with uncaught exception (group=0x40bf11f8)
02-25 16:19:16.664: E/AndroidRuntime(17284): FATAL EXCEPTION: AsyncTask #1
02-25 16:19:16.664: E/AndroidRuntime(17284): java.lang.RuntimeException: An error occured while executing doInBackground()
02-25 16:19:16.664: E/AndroidRuntime(17284):    at android.os.AsyncTask$3.done(AsyncTask.java:278)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at java.lang.Thread.run(Thread.java:856)
02-25 16:19:16.664: E/AndroidRuntime(17284): Caused by: java.lang.NullPointerException
02-25 16:19:16.664: E/AndroidRuntime(17284):    at com.example.tvrplayer.updateFiles.doInBackground(updateFiles.java:44)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at com.example.tvrplayer.updateFiles.doInBackground(updateFiles.java:1)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
02-25 16:19:16.664: E/AndroidRuntime(17284):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-25 16:19:16.664: E/AndroidRuntime(17284):    ... 5 more

Это - файл JSON, который получает материал от API

package com.example.tvrplayer;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class Json {

    static JSONArray getJson(String url, String method) {
       //Log.i("JSON",url);

        InputStream is = null;
        String result = "";
        JSONArray jsonObject = null;

       //HTTP
        try {
            HttpClient httpclient = new DefaultHttpClient();//for port 80 requests!
            if ( method == "GET") {
                HttpGet httpget = new HttpGet(url);
                HttpResponse response = httpclient.execute(httpget);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
                if (entity != null) {
                    httpget.abort();
                }
            } else if (method == "POST") {
                HttpPost httppost = new HttpPost(url);
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
            }



        } catch(Exception e) {
            Log.e("JSON - 1 -", e.toString());
            return null;
        }

       //Read response to string
        try {           
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();    
//          Log.d("JSON result",result);
        } catch(Exception e) {
            Log.e("JSON - 2 -", e.toString() + " - " + url);
            return null;
        }

       //Convert string to object
        try {
            jsonObject = new JSONArray(result);            
        } catch(JSONException e) {
            try {
                jsonObject = new JSONArray("["+result+"]");            
            } catch(JSONException e1) {
                Log.e("JSON - 3 -", e1.toString());
                return null;
            }
        }

        return jsonObject;
    }
}

so what I am imagining is happening is that while the asynctask is busy downloading another download is complete and closed the connection?

Какие-либо идеи, что это или как решить это?

0
nl ja de
mm, для (интервал j=0; j
добавлено автор Harry, источник
Да, я вижу его случай при Исключении 2 в Json.
добавлено автор Harry, источник
Хорошо я получу это и отправлю это
добавлено автор Harry, источник
Это ошибки как вы, спросил: Гнездо, закрытое / SocketException
добавлено автор Harry, источник
Это определенно помогло! Взял намного дольше, чтобы произойти
добавлено автор Harry, источник
что такое линия 44 из ваших doInBackground ()???
добавлено автор Budius, источник
таким образом, я могу безопасно предположить, что программы пустые! Необходимо зафиксировать это.
добавлено автор Budius, источник
дополнительные материалы для чтения ваш код I видит, что программы - объект Json, строят из Json.get (). Таким образом, наверняка it' s, потому что одно из тех нескольких исключений you' ловля ре запускается. Я предлагаю, чтобы вы вошли в режим отладки в Затмение и пропустили вашу строку кода с методической точностью, чтобы видеть точно, где это происходит.
добавлено автор Budius, источник
поэтому теперь попробуйте e.getMessage() и e.getClass() .getSimpleName() , таким образом, мы можем знать точно, что идет не так, как надо.
добавлено автор Budius, источник
хотя you' ll, чтобы отладить последние биты собой (или кто-то еще помогает), эта линия читатель BufferedReader = новый BufferedReader (новый InputStreamReader ("utf-8"), 8); не очень хорошо, как 8 недостаточно для буфера, попробуйте 8192 вместо этого.
добавлено автор Budius, источник

1 ответы

Вы получаете Исключение нулевого указателя в линии 44 в вашем doBackground() метод. Пожалуйста, опубликуйте полный код так, чтобы мы могли помочь вам далее. Удостоверьтесь, что все инициализации сделаны перед использованием любого объекта. В любом случае проверьте линию 44, какой бы ни возражают, что вы используете там, удостоверьтесь не ПУСТОЙ.

1
добавлено
Пожалуйста, se мое обновление, линия 44 отмеченных
добавлено автор Harry, источник
Если я удаляю этот Log.e ("JSON - 2 -", e.toString() + "-" + URL); возвратите пустой указатель; Это пойдет и не разобьет приложение. Но я предполагаю, что это не хорошая идея?
добавлено автор Harry, источник
Я возвращаю стоимость coreect да, Execpt за исключением. это возвращает Пустой указатель. я должен, возможно, изменить это, чтобы скорее возвратить пустое Множество JSON?
добавлено автор Harry, источник
программы ПУСТОЙ. Удостоверьтесь, что вы устанавливаете его правильно. JSON возвращает правильное значение? Или это возвращает ПУСТОЙ УКАЗАТЕЛЬ?
добавлено автор h4ck3d, источник
Есть проблема с getJson , необходимо зафиксировать его. Это становится пойманным в исключении и возвращается пустой указатель , который в свою очередь вызывает NPE для программы в линии 44.
добавлено автор h4ck3d, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)