安卓图像上传到服务器从相机错误
我想发送图像到我的服务器。我通过在LINK安卓图像上传到服务器从相机错误
考虑看看在教程做这个但是我需要发送照片从相机拍摄,而不是画廊,所以我做了一些变化,我得到这样一个错误:
致命异常:主要 进程:com.example.audriusalekna.camerapht,PID:25792 java.lang.RuntimeException:传递结果失败ResultInfo {who = null,request = 1,result = -1,data = Intent {act = inline-data(has extras)}} to activity {com.example.audriusalekna.camerapht/com.example.audriusalekna.camerapht.MainActivity}:java.lang.NullPointerException:试图调用虚拟方法'boolea n android.graphics.Bitmap.compress(android.graphics.Bitmap $ CompressFormat,int,java.io.OutputStream)'在android.app.ActivityThread.deliverResults(ActivityThread.java:3887) 上的null对象引用 .app.ActivityThread.handleSendResult(ActivityThread.java:3930) at android.app.ActivityThread.access $ 1300(ActivityThread.java:178) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1561) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5692) 在java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit。 java:959) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) 引发:java.lang.NullPointerException:尝试调用虚拟方法'boolean android.graphics.Bitmap.compress(android .graphics.Bitmap $ CompressFormat,int,java.io.OutputStream)'在空对象引用 at com.example.audriusalekna.camerapht.MainActivity.onActivityResult(MainActivity.java:70) at android.app.Activity.dispatchActivityResult (Activity.java:6346) at android.app.ActivityThread.deliverResults(ActivityThread.java:3883) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3930) at android.app.ActivityThread.access $ 1300(ActivityThread.java:178) at android.app.ActivityThread $ h.handleMessage(ActivityThread.java:1561) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5692) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372)
从MainActivity我的代码是在这里:
package com.example.audriusalekna.camerapht;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;
import static android.R.attr.bitmap;
import static android.R.attr.x;
import static android.R.attr.y;
import static android.provider.ContactsContract.CommonDataKinds.Website.URL;
public class MainActivity extends AppCompatActivity {
static final int REQUEST_IMAGE_CAPTURE = 1;
private Uri fileUri;
private ImageView imageView;
Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button cameraBtn = (Button) findViewById(R.id.push_button);
imageView = (ImageView)findViewById(R.id.imageTest);
cameraBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(photo);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
final String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);
//sending image to server
StringRequest request = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>(){
@Override
public void onResponse(String s) {
if(s.equals("true")){
Toast.makeText(MainActivity.this, "Uploaded Successful", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(MainActivity.this, "Some error occurred!", Toast.LENGTH_LONG).show();
}
}
},new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(MainActivity.this, "Some error occurred -> "+volleyError, Toast.LENGTH_LONG).show();;
}
}) {
//adding parameters to send
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("image", imageString);
return parameters;
}
};
RequestQueue rQueue = Volley.newRequestQueue(MainActivity.this);
rQueue.add(request);
}
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri filePath = data.getData();
try {
//getting image from gallery
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
//Setting image to ImageView
imageView.setImageBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
你的位为空,为了做你需要,你想要什么,将文件保存localy,比发送。 在您的onclick调用相机意图这样做:
Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");
File file = new File(YOUR_FILE_PATH + "/FILE.jpg");
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
后来从这样的路径onresult采取文件:
File f = new File(YOUR_FILE_PATH + "/FILE.jpg");
Bitmap bitmap=null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
try {
bitmap = BitmapFactory.decodeStream(new FileInputStream(f), null, options);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
imageView.setImageBitmap(bitmap);
希望它能帮助。
@greenapps解决方案工作!我只是改变了bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos); to photo.compress(Bitmap.CompressFormat.JPEG,100,baos);
请不要把它当成自己的答案。去掉它。相反,如果您认为答案应该在那里,您应该邀请评论者发表评论作为答案。 – greenapps
当您发送照片时,您是否在“ImageView”中看到它? – Guillaume
我认为这个链接帮助完全为你http://stackoverflow.com/questions/8373755/java-lang-runtimeexception-failure-delivering-result-resultinfowho-null-reque –
'java.lang.NullPointerException:试图调用虚拟方法'布尔android.graphics.Bitmap.compress(android.graphics.Bitmap $ CompressFormat,int,java.io.OutputStream)'在空对象引用'。采取你的措施。 – greenapps