2017-09-05 1 views
0
public class BidInPutActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback { 

Button submit; 
EditText title; 
Spinner catg; 
EditText dscrp; 
EditText qnt; 
RadioGroup rptrq_rdo; 
RadioButton yes_rdo; 
RadioButton no_rdo; 
EditText exprdt; 
ImageButton upldbtn; 
ImageView prdctimg; 
StorageReference filepath; 
Uri uri; 
String bidPhotoUrl; 
private static final int CAMERA_REQUEST_CODE = 1; 
private static final int REQUEST_READ_PERMISSION = 2; 

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

    filepath = FirebaseStorage.getInstance().getReference(); 

    databaseBid = FirebaseDatabase.getInstance().getReference("Bids"); 
    submit = (Button)findViewById(R.id.submit); 
    title = (EditText)findViewById(R.id.title); 
    catg = (Spinner)findViewById(R.id.catg); 
    dscrp= (EditText)findViewById(R.id.dscrp); 
    qnt= (EditText)findViewById(R.id.qnt); 
    rptrq_rdo= (RadioGroup)findViewById(R.id.rptrq_rdo); 
    yes_rdo=(RadioButton) findViewById(R.id.yes_rdo); 
    no_rdo=(RadioButton) findViewById(R.id.no_rdo); 
    exprdt= (EditText)findViewById(R.id.exprdt); 
    upldbtn=(ImageButton)findViewById(R.id.upldbtn); 
    prdctimg=(ImageView)findViewById(R.id.prdctimg); 

    submit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      addBid(); 
     } 
    }); 
//accessing camera intent and upload to firebase process 

    upldbtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent,CAMERA_REQUEST_CODE); 
    private void addBid(){ 
    final String bidtitle=title.getText().toString().trim(); 
    final String bidcategory=catg.getSelectedItem().toString().trim(); 
    final String biddescription=dscrp.getText().toString().trim(); 
    final String bidquantity=qnt.getText().toString().trim(); 
    final String bidrepetitive_requests_yes=yes_rdo.getText().toString().trim(); 
    final String bidrepetitive_requests_no=yes_rdo.getText().toString().trim(); 
    final String bidexpiry_date=exprdt.getText().toString().trim(); 
    if((!TextUtils.isEmpty(bidtitle))&&(!TextUtils.isEmpty(bidcategory)) 
      &&(!TextUtils.isEmpty(biddescription)) &&(!TextUtils.isEmpty(bidquantity)) 
      &&(!TextUtils.isEmpty(bidrepetitive_requests_yes))||(!TextUtils.isEmpty(bidrepetitive_requests_no)) 
      &&(!TextUtils.isEmpty(bidexpiry_date))||(!TextUtils.isEmpty(bidPhotoUrl))){ 

    final StorageReference onlinestorafephotoref = filepath.child("Photo").child(bidtitle).child(uri.getLastPathSegment()); 

     onlinestorafephotoref.putFile(uri).addOnSuccessListener(new 
     OnSuccessListener<UploadTask.TaskSnapshot>() { 

     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

       bidPhotoUrl = taskSnapshot.getDownloadUrl().toString(); 
       String id = databaseBid.push().getKey(); 
       classBidAttributes bid = new classBidAttributes(id,bidtitle,bidcategory,biddescription,bidquantity, 
         bidrepetitive_requests_no,bidrepetitive_requests_yes,bidexpiry_date,bidPhotoUrl); 

       databaseBid.child(id).setValue(bid); 
       Toast.makeText(BidInPutActivity.this, "Bid added", Toast.LENGTH_SHORT).show(); 
      } 
     }).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception e) { 

       Toast.makeText(BidInPutActivity.this, "Submit Failure ! Please Try Again", Toast.LENGTH_LONG).show(); 
       bidPhotoUrl = ""; 
       String id = databaseBid.push().getKey(); 
       classBidAttributes bid = new classBidAttributes(id,bidtitle,bidcategory,biddescription,bidquantity, 
         bidrepetitive_requests_no,bidrepetitive_requests_yes,bidexpiry_date,bidPhotoUrl); 
       databaseBid.child(id).setValue(bid); 
      } 
     }); finish();*/ 

     Toast.makeText(BidInPutActivity.this, "Bid added", Toast.LENGTH_SHORT).show(); 
    }else{ 
     Toast.makeText(BidInPutActivity.this, "Fill in missing data", Toast.LENGTH_LONG).show(); 
    } 
} 
    public void onActivityResult(int requestCode, int resultCode, Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK && data != null){ 
     uri = data.getData(); 
     Glide.with(BidInPutActivity.this).load(uri).into(prdctimg); 
    } 
} 
} 

PS : 내가 코드의 모든 사진 업로드 관련 부품을 제거 할 경우 잘에있는 텍스트 입력을 업로드 할 코드는 잘 작동 에 카메라 사용 권한과 read_external_storage 권한이 포함되어 있고, 카메라 접근 허용이 인 경우 marshmallow임을 확인 했으므로 누군가가이 도움으로 나를 도와줍니다. 추가 정보가 필요한지 말해줘.중포 기지 저장 - 중포 기지 저장 장치에 사진을 제출시 사진을 업로드 할 안드로이드 카메라를 사용하지만, 충돌

///////// CrashLog////////// 

09-06 10:36:12.293 3616-3616/com.mrmazen.cbid E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: com.mrmazen.cbid, PID: 3616 
                  java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getLastPathSegment()' on a null object reference 
                   at com.mrmazen.cbid.BidInPutActivity.addBid(BidInPutActivity.java:122) 
                   at com.mrmazen.cbid.BidInPutActivity.access$000(BidInPutActivity.java:30) 
                   at com.mrmazen.cbid.BidInPutActivity$1.onClick(BidInPutActivity.java:75) 
                   at android.view.View.performClick(View.java:5637) 
                   at android.view.View$PerformClick.run(View.java:22429) 
                   at android.os.Handler.handleCallback(Handler.java:751) 
                   at android.os.Handler.dispatchMessage(Handler.java:95) 
                   at android.os.Looper.loop(Looper.java:154) 
                   at android.app.ActivityThread.main(ActivityThread.java:6119) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
+0

-Uri 공급이 난 그냥 crashlog을 추가 한 충돌 로그 – Godather

+0

를 붙여주세요이 – user3207637

+0

난 곳을 알아낼 수있었습니다 확인 문제의 근원 인 uri "uri.getLastPathSegment()"는 uri가 프로세스를 계속 진행하는 대신 축배를 표시하기 위해 null 인 경우 uri가 null이라는 조건을 설정했습니다. 그래서 지금은 응용 프로그램이 충돌하지 않지만 uri가 작동하지 않습니다, 난 아직도 그것을 작동시키는 방법을 알아낼 수는 없습니다. – user3207637

답변

0

문서화되어 있지 않습니다 ACTION_IMAGE_CAPTURE에서 다시 Uri을 받고주의, 카메라 애플 리케이션은 이미지가 저장 될 위치하는 경우에 당신이 알고, 당신의 ACTION_IMAGE_CAPTURE 의도에 Uri.Supply EXTRA_OUTPUT을 반환해야하지 마십시오. null 선택하셨습니다 경우 onActivityResult 검사에서

final Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      Uri pictureUri=getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
      //pass your uri as an Extra here 
      pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,pictureUri); 
      startActivityForResult(pictureIntent, REQUEST_IMAGE_CAPTURE); 

당신은 Glide

 //get path here 
      picturePath= pictureUri.getPath(); 
관련 문제