2017-08-13 40 views
-1

我試圖分享一個圖像加載到glide下面這個guide,它給了我一個空指針異常。我已經發布的代碼和下面的堆棧跟蹤,它分享從imageView共享圖像的行動提供商給空指針異常

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private EditText editText; 
    private ShareActionProvider myShareActionProvider; 
    //private Bitmap bitmap; 
    private Uri uri; 
    private Intent shareIntent; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final ImageView imageView = (ImageView) findViewById(R.id.imageView); 

     String hi = "http://37n98a43dqtb4bua9n28nidp.wpengine.netdna-cdn.com/wp-content/uploads/2016/09/MyFriendPikachu.jpg"; 

     Glide 
       .with(this) 
       .load(hi) 
       .listener(new RequestListener<String, GlideDrawable>() { 
        @Override 
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { 
         return false; 
        } 

        @Override 
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 
         prepareShareIntent(((GlideBitmapDrawable) resource).getBitmap()); 
         attachShareIntentAction(); 
         return false; 
        } 
       }) 
       .placeholder(R.drawable.ic_action_name) 
       .error(R.drawable.ic_img_error) 
       .centerCrop() 
       .into(imageView); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.img_menu, menu); 

     MenuItem item = menu.findItem(R.id.action_share); 

     myShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); 
     attachShareIntentAction(); 

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     int id = item.getItemId(); 

     return super.onOptionsItemSelected(item); 


    } 

    public void prepareShareIntent(Bitmap drawableImage) { 

     Uri bmpUri = getBitmapFromDrawable(drawableImage); 

     shareIntent = new Intent(); 

     shareIntent.setAction(Intent.ACTION_SEND); 

     shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri); 

     shareIntent.setType("image/*"); 

    } 


    public void attachShareIntentAction() { 

     if (myShareActionProvider != null && shareIntent != null) 

      myShareActionProvider.setShareIntent(shareIntent); 

    } 


    public Uri getBitmapFromDrawable(Bitmap bmp) { 


     Uri bmpUri = null; 

     try { 


      File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "images" + System.currentTimeMillis() + ".png"); 

      FileOutputStream out = new FileOutputStream(file); 

      bmp.compress(Bitmap.CompressFormat.PNG, 90, out); 

      out.close(); 


      bmpUri = FileProvider.getUriForFile(MainActivity.this, "com.example.imnobody.sampleprojectnetwork", file); // use this version for API >= 24 

      // **Note:** For API < 24, you may use bmpUri = Uri.fromFile(file); 

     } catch (IOException e) { 

      e.printStackTrace(); 

     } 

     return bmpUri; 

    } 

} 

fileprovider.xml

<?xml version="1.0" encoding="utf-8"?> 

<paths> 

    <external-file-path 

     name="images" 

     path="Pictures" /> 

</paths> 

AndroidManifest.xml中

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

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

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





    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <provider 

      android:name="android.support.v4.content.FileProvider" 

      android:authorities="com.example.imnobody.sampleprojectnetwork.fileprovider" 

      android:exported="false" 

      android:grantUriPermissions="true"> 

      <meta-data 


       android:name="android.support.FILE_PROVIDER_PATHS" 

       android:resource="@xml/fileprovider" /> 

     </provider> 
    </application> 

</manifest> 

堆棧跟蹤

顯示java.lang.NullPointerException 在android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:583) 在android.support.v4.content.FileProvider.getPathStrategy(FileProvider。 java:557) at com.example.imnobody.sampleprojectnetwork.MainActivity.getBitmapFromDrawable(MainActivity.java:134) com.example上的android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:399) 。 imnobody.sampleprojectnetwork.MainActivity.prepareShareIntent(MainActivity.java: 95) at com.example.imnobody.sampleprojectnetwork.MainActivity $ 1.onResourceReady(MainActivity.java:59) at com.example.imnobody.sampleprojectnetwork.MainActivity $ 1.onResourceReady(MainActivity.java:51) at com.bumptech。 glide.request.GenericRequest.onResourceReady(GenericRequest.java:522) at com.bumptech.glide.request.GenericRequest.onResourceReady(GenericRequest.java:507) at com.bumptech.glide.load.engine.EngineJob.handleResultOnMainThread( EngineJob.java:158) at com.bumptech.glide.load.engine.EngineJob.access $ 100(EngineJob.java:22) at com.bumptech.glide.load.engine.EngineJob $ MainThreadCallback.han在android.app.ActivityThread.main處使用android.os.Looper.loop(Looper.java:193) (android.os.Handler.dispatchMessage(Handler.java:106) (dooMessage(EngineJob.java:202) Activity.java:5292) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:824) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) at dalvik.system.NativeStart。主(本地方法)

+0

在你的清單中的''元素上,'com.example.imnobody.sampleprojectnetwork'是'android:authorities'的值嗎? – CommonsWare

+0

是的,它是相同的@CommonsWare – Nobody

+0

不,它不是,你可以通過查看你的清單來判斷。 – CommonsWare

回答

0

<provider>具有以下android:authorities值:

com.example.imnobody.sampleprojectnetwork.fileprovider 

這是你正在爲getUriForFile()什麼,聲稱這是你的供應商的權力:

com.example.imnobody.sampleprojectnetwork 

這些都是不一樣,他們需要成爲。

+0

謝謝並改變,現在導致非法論證異常聲稱未能找到配置的根 – Nobody

+0

@無人:該消息意味着您的路徑和您的'FileProvider'元數據不排隊。 – CommonsWare

+0

我有他們張貼在上面,所以你發現有任何錯誤? – Nobody