2016-06-09 3 views
0

안녕하세요 저는 sqllite 데이터베이스에 이미지를 업로드하려고합니다. 그리고 잘 작동합니다. 문제 나는 어떤 이미지 프로그램 충돌을 선택하지 않으면 직면하고있다. 사용자가 갤러리에서 이미지를 선택하지 않으면 "이미지를 선택하십시오."을 표시하고 싶습니다. 어떻게 그 검증을 할 수 있습니까 ?? 여기 내 코드입니다 :android studio에서 이미지 업로드 확인

BlogActivity.java

public class BlogActivity extends AppCompatActivity { 

    Button btnSaveRecord; 
    Button btnfullinfo; 
    Button btnNewUser; 
    EditText editFirstName; 
    EditText editLastName; 

    Button btnSaveImage; 
    ImageView showImage; 


    EditText editWeb; 

    DatabaseManager databaseManager; 
    Blog blog = new Blog(); 

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

     btnSaveRecord = (Button) findViewById(R.id.btnSaveRecord); 
     editFirstName = (EditText) findViewById(R.id.editFirstName); 
     editLastName = (EditText) findViewById(R.id.editLastName); 
     btnSaveImage = (Button) findViewById(R.id.btnSaveImage); 
     editWeb = (EditText) findViewById(R.id.editWeb); 
     showImage = (ImageView) findViewById(R.id.showImage); 

     databaseManager = new DatabaseManager(BlogActivity.this); 


     if (getIntent().getExtras() != null) { 
      blog = getIntent().getExtras().getParcelable("Blog"); 
//    Toast.makeText(RegistrationActivity.this, user.get_first_name(), Toast.LENGTH_SHORT).show(); 
      editFirstName.setText(blog.get_title()); 
      editLastName.setText(blog.getBlog_desc()); 
      editWeb.setText(blog.getBlog_link()); 
      showImage.setImageBitmap(convertToBitmap(blog.getBlog_image())); 

     } 


     btnSaveImage = (Button) findViewById(R.id.btnSaveImage); 
     btnSaveImage.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       loadImageGallery(); 

      } 
     }); 
     btnfullinfo = (Button) findViewById(R.id.btnfullinfo); 
     btnfullinfo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(BlogActivity.this, BloglistActivity.class); 
       startActivity(intent); 

      } 
     }); 

     btnSaveRecord.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 

       Bitmap bitmap = resize(((BitmapDrawable) showImage.getDrawable()).getBitmap(), 512, 512); 


       blog.setBlog_tilte(editFirstName.getText().toString()); 
       blog.setBlog_desc(editLastName.getText().toString()); 
       blog.setBlog_image(convertToBase64(bitmap)); 
       blog.setBlog_link(editWeb.getText().toString()); 
       if (blog.getBlog_ID() == 0) { 
        databaseManager.addBlog(blog); 
       } else { 
        databaseManager.updateBlog(blog); 
       } 


       Toast toast = Toast.makeText(BlogActivity.this, "Blog Added Successfully", Toast.LENGTH_SHORT); 
       toast.show(); 
      } 
     }); 

     btnNewUser = (Button) findViewById(R.id.btnNewUser); 
     btnNewUser.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       //loadImageGallery(); 
       editFirstName.setText(""); 
       editLastName.setText(""); 
       showImage.setImageBitmap(null); 
       editWeb.setText(""); 
       blog = new Blog(); 
      } 
     }); 
    } 

    public void loadImageGallery() { 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1); 
    } 

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

     String fileSelected = null; 

     if (resultCode == RESULT_OK) { 

      /** Get File from Gallery**/ 
      try { 
       InputStream inputStream = getContentResolver().openInputStream(data.getData()); 
       Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 
       showImage.setImageBitmap(bitmap); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 

      Toast.makeText(BlogActivity.this, "Working", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    public String convertToBase64(Bitmap bitmap) { 
     ByteArrayOutputStream os = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, os); 
     byte[] byteArray = os.toByteArray(); 
     return Base64.encodeToString(byteArray, 0); 
    } 

    public Bitmap convertToBitmap(String base64String) { 
     byte[] decodedString = Base64.decode(base64String, Base64.DEFAULT); 
     Bitmap bitmapResult = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
     return bitmapResult; 
    } 


    private Bitmap resize(Bitmap originalImage, int width, int height) { 
     Bitmap background = Bitmap.createBitmap((int) width, (int) height, Bitmap.Config.ARGB_8888); 
     float originalWidth = originalImage.getWidth(), originalHeight = originalImage.getHeight(); 
     Canvas canvas = new Canvas(background); 
     float scale = width/originalWidth; 
     float xTranslation = 0.0f, yTranslation = (height - originalHeight * scale)/2.0f; 
     Matrix transformation = new Matrix(); 
     transformation.postTranslate(xTranslation, yTranslation); 
     transformation.preScale(scale, scale); 
     Paint paint = new Paint(); 
     paint.setFilterBitmap(true); 
     canvas.drawBitmap(originalImage, transformation, paint); 
     originalImage.recycle(); 
     return background; 
    } 

    //Actiobar Menu Item 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     //   getMenuInflater().inflate(R.menu.main, menu); 
     MenuInflater inflater = this.getMenuInflater(); 
     inflater.inflate(R.menu.appmenu, menu); 

     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     switch (id) { 
      case R.id.idblog: 
       startActivity(new Intent(getApplicationContext(), BloglistActivity.class)); 
       return true; 
      case R.id.idShowquiz: 
       startActivity(new Intent(getApplicationContext(), QuizActivity.class)); 
       return true; 
      case R.id.idaddblogs: 
       startActivity(new Intent(getApplicationContext(), BlogActivity.class)); 
       return true; 
      case R.id.idlinks: 
       startActivity(new Intent(getApplicationContext(), LinkActivity.class)); 
       return true; 
      case R.id.idShowportfolio: 
       startActivity(new Intent(getApplicationContext(), PersonlistActivity.class)); 
       return true; 
      case R.id.idaddportfolio: 
       startActivity(new Intent(getApplicationContext(), PersonActivity.class)); 
       return true; 
      case R.id.idaddContact: 
       startActivity(new Intent(getApplicationContext(), ContactActivity.class)); 
       return true; 
      case R.id.idsms: 
       startActivity(new Intent(getApplicationContext(), SmsActivity.class)); 
       return true; 
      case R.id.idlogout: 
//    Toast.makeText(this, " Log Out ", Toast.LENGTH_SHORT).show(); 
       Intent intent = new Intent(this, MainActivity.class); 
       intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this will clear all the stack 
       intent.putExtra("Exit me", true); 
       startActivity(intent); 
       finish(); 
     } 
     return super.onOptionsItemSelected(item); 
    } 

} 

blog_activity.xml는

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/bg" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <ImageView 
     android:id="@+id/showImage" 
     android:layout_width="400dp" 
     android:layout_height="100dp" 
     android:adjustViewBounds="true" 
     android:scaleType="fitCenter" /> 
    <!--android:src="@drawable/placeholder"--> 
    <Button 
     android:id="@+id/btnSaveImage" 
     android:layout_width="match_parent" 
     android:layout_height="30dp" 
     android:layout_gravity="center_horizontal" 
     android:background="#f66565" 
     android:text="Select Image" /> 

    <EditText 
     android:id="@+id/editFirstName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="Enter Blog Title"> 

     <requestFocus /> 
    </EditText> 

    <EditText 
     android:id="@+id/editLastName" 
     android:layout_width="match_parent" 
     android:layout_height="150dp" 
     android:ems="10" 
     android:hint="Enter Blog Description" /> 

    <EditText 
     android:id="@+id/editWeb" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:ems="10" 
     android:hint="Enter Web Link"> 

     <requestFocus /> 
    </EditText> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:padding="20dp"> 

     <Button 
      android:id="@+id/btnNewUser" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_margin="10dp" 
      android:background="#f66565" 
      android:text="New Blog" /> 

     <Button 
      android:id="@+id/btnSaveRecord" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_margin="10dp" 
      android:background="#f66565" 
      android:text="Save Blog" /> 

     <Button 
      android:id="@+id/btnfullinfo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_margin="10dp" 
      android:background="#f66565" 
      android:text="Show All" /> 

    </LinearLayout> 


</LinearLayout> 
나는 보통 이런 식으로 이미지를 선택하고 내가 어떤 문제를 얻지 않는다

답변

0

:

  Intent i = new Intent(Intent.ACTION_PICK); 
      i.setType("image/*"); 

      startActivityForResult(i, RESULT_LOAD_IMAGE);¸ 

    //... 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     Toast.makeText(c, "ON ACTIVITY RESULT", Toast.LENGTH_SHORT).show(); 

     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK) { 

      try { 

       Uri selectedImage = data.getData(); 

       String[] filePath = { MediaStore.Images.Media.DATA }; 

       Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null); 

       c.moveToFirst(); 

       int columnIndex = c.getColumnIndex(filePath[0]); 

       String picturePath = c.getString(columnIndex); 

       c.close(); 

       Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath)); 

       saveImage(thumbnail); 

      } 

      catch(Exception e) { 
       Toast.makeText(this, String.valueOf(e), Toast.LENGTH_LONG).show(); 
      } 
     } 

    } 

오류의 원인은 무엇입니까? 뒤로 버튼을 누르거나 다른 파일 형식을 선택하고 있습니까?

+0

이미지를 선택하지 않고 저장을 누르면 항상 null 포인터 예외가 표시됩니다. –

+0

그래서 당신은 무엇을 선택하고 있습니까? 당신이 뒤로 버튼을 밀었 기 때문에 아무것도? –

+0

이것은 내 삽입 양식입니다. 이미지를 선택하지 않고 내 폼을 던지는 null 포인터 예외를 저장하지 않으면. 나는 빈 문자열을 저장할 수 없다고 생각한다. 그 이유는 사용자가 이미지를 선택하는 것을 잊었을 때 메시지를 보여주고 싶습니다. 메시지를 누르십시오. "이미지를 삽입하십시오."라는 메시지가 표시됩니다. –

관련 문제