2016-11-15 20 views
-1

写真をサーバーに送信する際に問題があります。コンソールに表示された写真をアップロードしたいとき:Java Android画像をサーバーにアップロード

java.lang.NullPointerException:仮想メソッド 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap $ CompressFormat、int、java.io)を呼び出そうとしました。

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Toast; 

import org.apache.commons.codec.binary.Base64; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.util.EntityUtils; 

import java.io.ByteArrayOutputStream; 
import java.util.ArrayList; 


public class MainActivity extends Activity { 

    Button btpic, btnup; 
    private Uri fileUri; 
    String picturePath; 
    Uri selectedImage; 
    Bitmap photo; 
    String ba1; 
    public static String URL = "Paste your URL here"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btpic = (Button) findViewById(R.id.cpic); 
     btpic.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       clickpic(); 
      } 
     }); 

     btnup = (Button) findViewById(R.id.up); 
     btnup.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       upload(); 
      } 
     }); 
    } 

    private void upload() { 
     // Image location URL 
     Log.e("path", "----------------" + picturePath); 

     // Image 
     Bitmap bm = BitmapFactory.decodeFile(picturePath); 
     ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
     bm.compress(Bitmap.CompressFormat.JPEG, 90, bao); 
     byte[] ba = bao.toByteArray(); 
     ba1 = Base64.encodeBase64String(ba); 

//  Log.e("base64", "-----" + ba1); 

     // Upload image to server 
     new uploadToServer().execute(); 

    } 

    private void clickpic() { 
     // Check Camera 
     if (getApplicationContext().getPackageManager().hasSystemFeature(
       PackageManager.FEATURE_CAMERA)) { 
      // Open default camera 
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

      // start the image capture Intent 
      startActivityForResult(intent, 100); 

     } else { 
      Toast.makeText(getApplication(), "Camera not supported", Toast.LENGTH_LONG).show(); 
     } 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == 100 && resultCode == RESULT_OK) { 

      selectedImage = data.getData(); 
      photo = (Bitmap) data.getExtras().get("data"); 

      // Cursor to get image uri to display 

      String[] filePathColumn = {MediaStore.Images.Media.DATA}; 
      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      picturePath = cursor.getString(columnIndex); 
      cursor.close(); 

      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      ImageView imageView = (ImageView) findViewById(R.id.Imageprev); 
      imageView.setImageBitmap(photo); 
     } 
    } 

    public class uploadToServer extends AsyncTask<Void, Void, String> { 

     private ProgressDialog pd = new ProgressDialog(MainActivity.this); 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pd.setMessage("Wait image uploading!"); 
      pd.show(); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 

      ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
      nameValuePairs.add(new BasicNameValuePair("base64", ba1)); 
      nameValuePairs.add(new BasicNameValuePair("ImageName", System.currentTimeMillis() + ".jpg")); 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost(URL); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       String st = EntityUtils.toString(response.getEntity()); 
       Log.v("log_tag", "In the try Loop" + st); 

      } catch (Exception e) { 
       Log.v("log_tag", "Error in http connection " + e.toString()); 
      } 
      return "Success"; 

     } 

     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 
      pd.hide(); 
      pd.dismiss(); 
     } 
    } 
} 

ログ:

08:52:35.199 941-941/com.example.krzysiek.myapplication76 E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.example.krzysiek.myapplication76, PID: 941 
                        java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.toString()' on a null object reference 
                         at com.example.krzysiek.myapplication76.MainActivity.clickpic(MainActivity.java:90) 
                         at com.example.krzysiek.myapplication76.MainActivity.access$000(MainActivity.java:34) 
                         at com.example.krzysiek.myapplication76.MainActivity$1.onClick(MainActivity.java:52) 
                         at android.view.View.performClick(View.java:5697) 
                         at android.widget.TextView.performClick(TextView.java:10826) 
                         at android.view.View$PerformClick.run(View.java:22526) 
                         at android.os.Handler.handleCallback(Handler.java:739) 
                         at android.os.Handler.dispatchMessage(Handler.java:95) 
                         at android.os.Looper.loop(Looper.java:158) 
                         at android.app.ActivityThread.main(ActivityThread.java:7224) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
11-15 08:52:56.003 941-1089/com.example.krzysiek.myapplication76 W/System: ClassLoader referenced unknown path: /data/data/com.example.krzysiek.myapplication76/lib 
11-15 08:54:47.258 941-950/com.example.krzysiek.myapplication76 W/art: Suspending all threads took: 12.657ms 

私のマニフェスト:

.OutputStream「)nullオブジェクト参照

に私はこれをしませんでした

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.example.krzysiek.myapplication76"> 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 
    <uses-feature android:name="android.hardware.camera" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.INTERNET"/> 

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

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

</manifest> 
+0

共有あなたのlogcat – SaravInfern

+0

BitmapFactory.decodeFile(picturePath)は、ビットマップがnullを返すように見えるではないかもしれません。そのパスにイメージが存在するかどうかを確認してください。 – Raghavendra

+3

マニフェストファイルのsdカードから読み取る権限を持っているかどうかを確認してください。 – SaravInfern

答えて

1
Bitmap bm = BitmapFactory.decodeFile(picturePath); returns null bitmap. 

理由は読み外部記憶許可が必要とされるだろう。 Androidオペレーティングシステムのバージョンが5.0より高い場合は、サポートランタイム権限があることを確認してください。

また、あなたのpicturePathがURIスキームイメージを持つファイルであることを確認してください。

ありがとうございます。

エムレ

関連する問題