2016-09-23 4 views
0

Код здесь будет делать обновление textview и listview с использованием фоновой службы.Трансляция Intent получает нулевое значение

класс Broadcastservice Деталь

public class BroadcastService extends Service { 

    private static final String TAG = "BroadcastService"; 
    public static final String BROADCAST_ACTION = "com.example.activity.displayevent"; 
    private final Handler handler = new Handler(); 
    Intent intentBS; 
    int counter = 0; 
@Override 
    public void onCreate() { 
     super.onCreate(); 

     intentBS = new Intent(BROADCAST_ACTION);  
} 
@Override 
    public void onStart(Intent intentBS, int startId) { 
     handler.removeCallbacks(sendUpdatesToUI); 
     handler.postDelayed(sendUpdatesToUI, 1000); // 1 second 

    } 

    private Runnable sendUpdatesToUI = new Runnable() { 
     public void run() { 
      getShiftCode();   
      handler.postDelayed(this, 10000); // 10 seconds 
     } 
    };  
private void getShiftCode() { 
    List<Header> headers = new ArrayList<Header>(); 
    headers.add(new BasicHeader("Accept", "application/json")); 

    EmployeeRestClient.get(BroadcastService.this, "RestExample/shiftcode", 
    headers.toArray(new Header[headers.size()]),null, 
     new JsonHttpResponseHandler() { 
    @Override 
    public void onSuccess(int statusCode, Header[] headers, JSONArray response) { 
    ArrayList<String> scArray = new ArrayList<String>(); 

     for (int i = 0; i < response.length(); i++) { 
     try { 
      String Sc_array = c.getString("shift_Code"); 
      scArray.add(Sc_array); 
      } catch (JSONException e) { 
      e.printStackTrace(); 
       } 
      } 
       shift_Code1= scArray.get(0); 
       intentBS.putExtra("shift_Code1", shift_Code1); 

      getEmployees(); 
      sendBroadcast(intentBS); 

     } 
    }); 
} 

private void getEmployees() { 
    List<Header> headers = new ArrayList<Header>(); 
    headers.add(new BasicHeader("Accept", "application/json")); 

    EmployeeRestClient.get(BroadcastService.this, "RestExample/employee", 
    headers.toArray(new Header[headers.size()]),null, 
     new JsonHttpResponseHandler() { 
    @Override 
    public void onSuccess(int statusCode, Header[] headers, JSONArray response) { 
    ArrayList<String> employeeArray1 = new ArrayList<String>(); 
    ArrayList<String> employeeArray2 = new ArrayList<String>(); 

     for (int i = 0; i < response.length(); i++) { 
     try { 
       String First_NameArray = c.getString("first_Name"); 
      String Second_NameArray = c.getString("second_name"); 
      employeeArray1.add(First_NameArray); 
      employeeArray2.add(Second_NameArray); 

      } catch (JSONException e) { 
      e.printStackTrace(); 
       } 
      } 
      intentBS.putExtra("employee_Array1", employeeArray1); 
     intentBS.putExtra("employee_Array2", employeeArray2); 
     } 
    }); 
} 

Ошибка:

java.lang.RuntimeException: Error receiving broadcast Intent { act=com.example.activity.displayevent flg=0x10 (has extras) } and 

Вызванный: java.lang.NullPointerException

The NullPointerException указывает на мой first_Name.getCount() метод в моем adapterclass и эти направления моей деятельности

updateUI(intentBS); 
private void updateUI(Intent intentBS) { 
final MyListAdapter myListAdapter = new MyListAdapter (SecondActivity.this,nameArray1,nameArray2); 

Но передаваемая трансляция не может быть получена в классе активности.

ответ

0

Извините, возможно, я что-то пропустил, но если я правильно понял код, ваша проблема в том, что вы не отправляете оба списка массивов.

В способе shiftCode вы вызываете метод api "RestExample/shiftcode" и регистрируете на нем пользовательский прослушиватель. Тогда на onSuccess обратного вызова у вас есть эти две строки:

getEmployees(); 
sendBroadcast(intentBS); 

Согласно вашей идее первый метод должен подготовить intentBS и второй отправить это намерение с сотрудниками. Но этого не произойдет. Потому что сначала вызывается sendBroadcast(intentBS), а затем вы заполняете intentBS данными о сотруднике, потому что getEmployees использует вызов Api, который переходит в другой поток, а затем в последнее время (после sendBroadcast) вызывает обратный вызов onSuccess.

Так ведь сначала вы посылаете радиопередачу и только затем заполнить intentBS

+0

я некоторые, что понял, о чем вы говорите. На самом деле, я получаю значение shiftcode, если отключить метод getemployees(). Что мне теперь нужно делать, чтобы получить значения arraylist. – user3785322

+0

@ user3785322 В вашем случае как быстрое решение вы можете легко перемещать 'sendBroadcast (intentBS),' to' getEmployees' и помещать его после 'intentBS.putExtra (" employee_Array2 ", employeeArray2);' –

+0

Отлично. Это сработало. Я пробовал все остальное, кроме этого. Кстати, это правильный способ сделать это. – user3785322

Смежные вопросы