title: How to refresh call log
body: <p>I'm trying to refresh the call log once a button is pressed. I have both a Uri and Cursor defined</p>
  
  <pre><code>Cursor c;
  Uri allCalls = Uri.parse("content://call_log/calls");
  </code></pre>
  
  <p>and then this function is called in onCreate</p>
  
  <pre><code>public void checkLogs() {
      c = getContentResolver().query(allCalls, null, null, null, sOrder);
  
      while (c.moveToNext()) {
          num = c.getString(c.getColumnIndex(CallLog.Calls.NUMBER)); // for
                                                                      // number
          if (num.startsWith("+1")) {
              num = num.substring(2);
          }
          name = c.getString(c.getColumnIndex(CallLog.Calls.CACHED_NAME)); // for
                                                                              // name
          type = Integer.parseInt(c.getString(c
                  .getColumnIndex(CallLog.Calls.TYPE))); // for type
  
          if (type == 3 &amp;&amp; arrlst.contains(num) == false &amp;&amp; name == null) {
              arrlst.add(num);
              initialize(num);
          }
  
          else {
              arrlst.add(num);
              continue;
          }
      }
  
      c.close();
  }
  </code></pre>
  
  <p>This works, but I tried making a refresh button that contains the following code</p>
  
  <pre><code>    @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
              case (R.id.menuRefresh):
                  allCalls = Uri.parse("content://call_log/calls");
                  checkLogs();
      }
      return false;
  }
  </code></pre>
  
  <p>when I press the refresh the new calls do not appear, but when I close and open the application they appear. What am I doing wrong?</p>
  
  <p>Error log when trying to use Loader</p>
  
  <pre><code>05-25 02:31:14.724: E/AndroidRuntime(18892): FATAL EXCEPTION: main
  05-25 02:31:14.724: E/AndroidRuntime(18892): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.callfinder/com.example.callfinder.FindCalls}: java.lang.NullPointerException
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2356)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at android.app.ActivityThread.access$600(ActivityThread.java:150)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at android.os.Handler.dispatchMessage(Handler.java:99)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at android.os.Looper.loop(Looper.java:137)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at android.app.ActivityThread.main(ActivityThread.java:5195)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at java.lang.reflect.Method.invokeNative(Native Method)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at java.lang.reflect.Method.invoke(Method.java:511)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at dalvik.system.NativeStart.main(Native Method)
  05-25 02:31:14.724: E/AndroidRuntime(18892): Caused by: java.lang.NullPointerException
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at com.example.callfinder.FindCalls.checkLogs(FindCalls.java:171)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at com.example.callfinder.FindCalls.onCreate(FindCalls.java:55)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at android.app.Activity.performCreate(Activity.java:5104)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2260)
  05-25 02:31:14.724: E/AndroidRuntime(18892):    ... 11 more
  </code></pre>
  
  <p>Also the code that I tried to explain if it was confusing in the comment</p>
  
  <pre><code>public void initialize() {
      layout = (LinearLayout) findViewById(R.id.ll1);
      tvTitle = (TextView) findViewById(R.id.textView1);
      lp = new LayoutParams(LayoutParams.MATCH_PARENT,
              ViewGroup.LayoutParams.WRAP_CONTENT);
      sOrder = String.format(sDate + " %s", sSort);
  
      mAdapter = new SimpleCursorAdapter(this, R.layout.activity_find_calls,
              null, null, null, 0);
      getLoaderManager().initLoader(0, null, this);
  
  }
  
  @Override
  public Loader&lt;Cursor&gt; onCreateLoader(int arg0, Bundle arg1) {
      return new CursorLoader(this, allCalls,
              null, null, null, sOrder);
  }
  
  @Override
  public void onLoadFinished(Loader&lt;Cursor&gt; loader, Cursor cursor) {
      switch (loader.getId()) {
        case 1:
            mAdapter.swapCursor(cursor);
            break;
      }
  
  }
  
  @Override
  public void onLoaderReset(Loader&lt;Cursor&gt; arg0) {
      mAdapter.swapCursor(null);
  
  }
  </code></pre>
  
  <p>and</p>
  
  <pre><code>    public void checkLogs() {
      c = mAdapter.getCursor();
      //c = getContentResolver().query(allCalls, null, null, null, sOrder);
  
      while (c.moveToNext()) {
          num = c.getString(c.getColumnIndex(CallLog.Calls.NUMBER)); // for
                                                                      // number
          if (num.startsWith("+1")) {
              num = num.substring(2);
          }
          name = c.getString(c.getColumnIndex(CallLog.Calls.CACHED_NAME)); // for
                                                                              // name
          type = Integer.parseInt(c.getString(c
                  .getColumnIndex(CallLog.Calls.TYPE))); // for type
  
          if (type == 3 &amp;&amp; arrlst.contains(num) == false &amp;&amp; name == null) {
              arrlst.add(num);
              makeButton(num);
          }
  
          else {
              arrlst.add(num);
              continue;
          }
      }
  
  
  }
  </code></pre>