2016-08-08 6 views
0
에서 이미지를 공유 내 목표는 이미지가

RecyclerView

내가 각 항목 아래의 공유 버튼이 제대로 를 온 클릭 기능을 잘 살고 추가 한 Picasso lib 디렉토리를 사용하여 인터넷에서로드 RecyclerView 내부 ImageView에서 이미지를 공유 할

하지만, 기울어진다.

08-08 21:10:59.956 8934-8934/com.myapp.app E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.myapp.app, PID: 8934 
java.lang.NullPointerException: Attempt to invoke virtual method 
'void android.widget.ImageView.setDrawingCacheEnabled(boolean)' on a null object reference 
at com.myapp.app.DataAdapter$1.onClick(DataAdapter.java:60) 
at android.view.View.performClick(View.java:5232) 
at android.view.View$PerformClick.run(View.java:21289) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:168) 
at android.app.ActivityThread.main(ActivityThread.java:5885) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
+0

스택 추적도 게시 할 수 있습니까? –

+0

은 오류보기 – DipanIns

+1

을 추가했습니다. 이제 button view 내에서 imageview를 찾고 있기 때문에'content = (ImageView) v.findViewById (R.id.image_android);'content = viewHolder.getImage_android()에 의해 오류 라인이 추가되었습니다. –

답변

1

문제는 해결하기 쉽습니다. 당신이 여기 여기 v.findViewById(R.id.image_android)

v에 잘못된 View를 참조하기 때문에

는 그냥 Button보기를 참조

content = viewHolder.image_android; 

content = (ImageView) v.findViewById(R.id.image_android); 

을 변경하고 내부 찾기 위해 노력하고있다 버튼. 실제 이미지가 Button 안에 있지 않습니까?

올바르게 참조 된 ViewHolder에서 image_android을 참조하십시오. 더 이상이 아니게됩니다.

+0

그것은 작동하지만 .. 이제는 또 다른 문제 - 내가 공유 버튼을 클릭하면 리사이클 뷰에서 잘못된 이미지를 집어 들고 .. 당신이 나를 더 안내 할 수 있습니까? – DipanIns

+0

예, 도움을 드리고 싶습니다. 그러나 그것은 다른 질문이어야합니다. 새로운 질문을하고 저를 연결하십시오. 감사. :-) –

+0

여기 링크입니다 http://stackoverflow.com/questions/38854039/share-button-in-recyclerview-picking-up-wrong-images – DipanIns

-1

:이 오류 로그 라인

도와주세요 난 화재

를 온 클릭 할 때마다

package com.myapp.app; 

import android.content.Context; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.net.Uri; 
import android.os.Environment; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.myapp.app.model.AndroidVersion; 
import com.squareup.picasso.Picasso; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.util.ArrayList; 

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { 
    private ArrayList<AndroidVersion> android; 
    private Context context; 
    private ImageView content; 



    public DataAdapter(Context context,ArrayList<AndroidVersion> android) { 
     this.android = android; 
     this.context = context; 
    } 

    @Override 
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) { 


     viewHolder.tv_name.setText(android.get(i).getName()); 
     viewHolder.tv_version.setText(android.get(i).getVer()); 
     Picasso.with(context).load(android.get(i).getApi()).into(viewHolder.img_android); 
     Picasso.with(context).load(android.get(i).getImage()).into(viewHolder.image_android); 


     viewHolder.btshare.setOnClickListener(new View.OnClickListener() { 
      @Override 
     public void onClick(View v) { 
      /// button click event 
       content = (ImageView) v.findViewById(R.id.image_android); 
       content.setDrawingCacheEnabled(true); 
       Bitmap bitmap = Bitmap.createBitmap(content.getDrawingCache()); 
       File cachePath = new File("/DCIM/Camera/image.jpg"); 
       try { 
        cachePath.createNewFile(); 
        FileOutputStream ostream = new FileOutputStream(cachePath); 
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream); 
        ostream.close(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 



       Intent share = new Intent(Intent.ACTION_SEND); 
       Uri phototUri = Uri.parse("/DCIM/Camera/image.jpg"); 
       share.setData(phototUri); 
       share.setType("image/*"); 
       share.putExtra(Intent.EXTRA_STREAM, phototUri); 
       v.getContext().startActivity(Intent.createChooser(share,"Share via")); 


     } 
     }); 



    } 

    @Override 
    public int getItemCount() { 
     return android.size(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder{ 
     private TextView tv_name,tv_version; 
     private ImageView img_android,image_android; 
     private Button btshare; 

     public ViewHolder(View view) { 
      super(view); 
      btshare = (Button) view.findViewById(R.id.btshare); 
      tv_name = (TextView)view.findViewById(R.id.tv_name); 
      tv_version = (TextView)view.findViewById(R.id.tv_version); 
      img_android = (ImageView)view.findViewById(R.id.img_android); 
      image_android = (ImageView)view.findViewById(R.id.image_android); 


     } 
    } 


} 

그것은 힘이 응용 프로그램을 닫습니다 :

나는이 데이터 어댑터가 을 ViewHolder에 설정하고에 설정하지 마세요..

1

변화는 content = (ImageView) v.findViewById(R.id.image_android)

content = (ImageView) viewholder.image_android; 

에 귀하의 이미지 뷰는 itemView 내 코드는 버튼 내에서 그것을 찾기 위해 노력하고있다.