2016-01-16 6 views
0

Я запускаю свое приложение на двух разных устройствах Android. Первый является Arnova 9 G2 Tablet и второй Сони Xperia P. В планшете Arnova мое приложение успешно выполнен, но в Sony Xperia P телефон, LogCat показывает мне следующее сообщение об ошибке:Запуск приложения Android на разных устройствах

/data/data/com.example.androidjnetpcaptest/interfaces: open failed: EACCES (Permission denied) FATAL EXCEPTION: main java.lang.NullPointerException at com.example.androidjnetpcaptest.InterfacesFragment.onCreateView(InterfacesFragment.java:35)

Мой манифест XML файл:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.androidjnetpcaptest" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="19" /> 

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

    <uses-permission android:name="android.pemission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <activity 
      android:name=".SplashScreenActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.Default" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name=".InformationsActivity" 
      android:theme="@android:style/Theme.Holo" 
      android:label="@string/app_name" android:screenOrientation="portrait"> 

      <intent-filter> 
       <action android:name="android.intent.action.Default" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity>   
    </application> 

</manifest> 

А класс InterfacesFragment является:

public class InterfacesFragment extends Fragment 
{ 
    private Scanner inputStream = null; 
    private TextView interfacesTextView = null; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     try 
     { 
      inputStream = new Scanner(new FileInputStream("/data/data/com.example.androidjnetpcaptest/interfaces")); 
     } 
     catch (FileNotFoundException e) 
     { 
      Log.e("InterfacesFragment_ERROR: ", e.getMessage()); 
     } 

     String lines = ""; 
     while (inputStream.hasNextLine()) 
     { 
      lines = lines + inputStream.nextLine() + "\n"; 
     } 

     inputStream.close(); 

     final ProgressDialog ringProgressDialog = ProgressDialog.show(getActivity(), "Please wait ...", "Finding interfaces ...", true); 
     ringProgressDialog.setCancelable(true); 

     new Thread(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       try 
       { 
        Thread.sleep(4000); 
       } 
       catch (Exception e) 
       { 

       } 
       ringProgressDialog.dismiss(); 
      } 
     }).start(); 

     View rootView = inflater.inflate(R.layout.interfaces, container, false); 
     interfacesTextView = (TextView) rootView.findViewById(R.id.interfacesTextView); 
     interfacesTextView.setText(lines); 
     interfacesTextView.setMovementMethod(new ScrollingMovementMethod()); 
     return rootView; 
    } 
} 
+0

Не могли бы вы рассказать, какая строка номера 35 в InterfacesFragment? – Keshav

+0

В InterfacesFragmentClass строка: while (inputStream.hasNextLine()) –

+0

Возможно, вам нужно добавить разрешение на чтение/чтение: '' в манифест. –

ответ

1

Проблема заключается в использовании абсолютного пути /data/data/com.example. androidjnetpcaptest/interfaces. Вы не должны предполагать, что это местоположение данных для приложения. Приложения можно перенести на внешнее хранилище, и поскольку ICS система поддерживает несколько пользователей (людей), где приложение получает различное хранилище для каждого пользователя. Вместо этого используйте Context.getFilesDir(), чтобы получить приложение-личное место, где файлы могут быть созданы и сохранены.

Вам не нужны специальные разрешения для чтения/записи этого места.

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