2013-07-29 4 views
0

Я загружаю данные sdcard .vcf, а затем помещаю его в базу данных. Я делаю это с помощью этого кода:Ошибка отправки результата в Android

public void loadContactsFromSdcard() { 
    Intent intent = new Intent(getBaseContext(), FileDialog.class); 
    intent.putExtra(FileDialog.START_PATH, Environment.getExternalStorageDirectory().getPath()); 

    //can user select directories or not 
    intent.putExtra(FileDialog.CAN_SELECT_DIR, false); 

    //filter files, looking only for .vcf format 
    intent.putExtra(FileDialog.FORMAT_FILTER, new String[] { "vcf" }); 

    startActivityForResult(intent, REQUEST_SAVE); 
} 

public synchronized void onActivityResult(final int requestCode, 
     int resultCode, final Intent data) { 

    String filePath = data.getStringExtra(FileDialog.RESULT_PATH); 

    if (resultCode == Activity.RESULT_OK) { 

     if (requestCode == REQUEST_SAVE) { 
      uti.showToast(getBaseContext(), filePath); 

      File file = new File(filePath); 
      FileInputStream fis = null; 
      StringBuilder builder = new StringBuilder(); 

      try { 
       fis = new FileInputStream(file); 

       BufferedReader br = new BufferedReader(new InputStreamReader((InputStream)fis, "UTF-8")); 

       String line; 
       while ((line = br.readLine()) != null) { 
        builder.append(line).append("\n"); 
       }   

      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        if (fis != null) 
         fis.close(); 
       } catch (IOException ex) { 
        ex.printStackTrace(); 
       } 
      } 
      System.out.println(builder.toString()); 
      contactService.updateContacts(builder.toString()); 

     } else if (requestCode == REQUEST_LOAD) { 
      System.out.println("Loading..."); 
     } 

    } else if (resultCode == Activity.RESULT_CANCELED) { 
     Logger.getLogger(ContactListActivity.class.getName()).log(
       Level.WARNING, "file not selected"); 
    } 
} 

Я думал, что это работает, но когда сейчас, видимо, этого не происходит. Я сменил программное обеспечение телефона, возможно, это проблема. Выход журнала:

07-29 11:15:23.913: E/AndroidRuntime(16473): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { cmp=pl..stxcontactsync/.util.FileDialog (has extras) }} to activity {pl..stxcontactsync/pl..stxcontactsync.ContactListActivity}: java.lang.NullPointerException 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.app.ActivityThread.deliverResults(ActivityThread.java:2553) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2595) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.app.ActivityThread.access$2000(ActivityThread.java:121) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.os.Looper.loop(Looper.java:123) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.app.ActivityThread.main(ActivityThread.java:3701) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at java.lang.reflect.Method.invokeNative(Native Method) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at java.lang.reflect.Method.invoke(Method.java:507) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at dalvik.system.NativeStart.main(Native Method) 
07-29 11:15:23.913: E/AndroidRuntime(16473): Caused by: java.lang.NullPointerException 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.content.ComponentName.<init>(ComponentName.java:75) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.content.Intent.<init>(Intent.java:2705) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at pl..stxcontactsync.ContactServiceActivity.updateContacts(ContactServiceActivity.java:79) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at pl..stxcontactsync.ContactListActivity.onActivityResult(ContactListActivity.java:298) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
07-29 11:15:23.913: E/AndroidRuntime(16473): at android.app.ActivityThread.deliverResults(ActivityThread.java:2549) 
07-29 11:15:23.913: E/AndroidRuntime(16473): ... 11 more 

Загрузка данных в порядке, я вижу в консоли, что загружается должным образом. Затем он начинает сохранять контакты в базе данных и после первого контакта сбой.

ответ

1

У вас есть исключение из null указателя. Он отображается в трассировке стека, которую вы отправили. updateContacts() пытается инициализировать Intent с недопустимыми параметрами (с null). Похоже, что имя компонента недопустимо. Попытайтесь проверить это, вы можете использовать отладчик.

+0

Проблема заключается в следующем: Intent intent = new Intent (getBaseContext(), ContactListActivity.class); \t \t startActivity (намерение); Я изменил на «контекст» в конструкторе, но он все еще не работает. Я думаю, что знаю проблему. –

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