Android 尝试获取图像路径时出现java空指针异常
我正在处理联系人列表应用程序,当我尝试在编辑文本中获取图像路径时,出现错误:Android 尝试获取图像路径时出现java空指针异常,android,Android,我正在处理联系人列表应用程序,当我尝试在编辑文本中获取图像路径时,出现错误: 12-27 18:12:37.909: E/AndroidRuntime(2620): Caused by: java.lang.NullPointerException 12-27 18:12:37.909: E/AndroidRuntime(2620): at org.example.dbcontactconsole.ContactDetails.onCreate(ContactDetails.java:5
12-27 18:12:37.909: E/AndroidRuntime(2620): Caused by: java.lang.NullPointerException
12-27 18:12:37.909: E/AndroidRuntime(2620): at org.example.dbcontactconsole.ContactDetails.onCreate(ContactDetails.java:54)
12-27 18:12:37.909: E/AndroidRuntime(2620): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-27 18:12:37.909: E/AndroidRuntime(2620): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
ContactDetails.java源代码为:
package org.example.dbcontactconsole;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class ContactDetails extends Activity{
private Button cancelButton;
private Button saveContactButton;
private static EditText poza;
private static final int SELECT_PICTURE = 1;
private static EditText nameField;
private static EditText mobilePhoneField;
private static EditText emailField;
private static Uri currImageURI;
private static String operationType;
static final int RESULT_MODIFY_USER = 2;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.contactdetails);
Button sButton = (Button) findViewById(R.id.button1);
sButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// in onCreate or any event where your want the user to
// select a file
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), SELECT_PICTURE);
}
});
Bundle incomingActionType = getIntent().getExtras();
operationType = incomingActionType.getString("mod_type");
if (operationType.equals("addPerson")){
nameField = (EditText) findViewById(R.id.contactName);
mobilePhoneField = (EditText) findViewById(R.id.contactmobile);
emailField = (EditText) findViewById(R.id.contactemail);
poza=(EditText) findViewById(R.id.editText1);
poza.setText(currImageURI.toString());
}
else if (operationType.equals("modifyPerson")){
String modifyFirstName = incomingActionType.getString("cFirstName");
nameField = (EditText) findViewById(R.id.contactName);
nameField.setText(modifyFirstName);
String modifyPhoneNumber = incomingActionType.getString("cMobilePhone");
mobilePhoneField = (EditText) findViewById(R.id.contactmobile);
mobilePhoneField.setText(modifyPhoneNumber);
String modifyEmail = incomingActionType.getString("cEmail");
emailField = (EditText) findViewById(R.id.contactemail);
emailField.setText(modifyEmail);
}
cancelButton = (Button) findViewById(R.id.cancelcontactbutton);
saveContactButton = (Button) findViewById(R.id.savecontactbutton);
saveContactButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent resultIntent = new Intent();
Bundle contactData = new Bundle();
if (nameField.getText().toString().length() == 0){
new AlertDialog.Builder(ContactDetails.this).setTitle("Error").setMessage("First name field cannot be empty!").setNeutralButton("Close", null).show();
} else if (mobilePhoneField.getText().toString().length() == 0){
new AlertDialog.Builder(ContactDetails.this).setTitle("Error").setMessage("Mobile Phone field cannot be empty!").setNeutralButton("Close", null).show();
} else if (emailField.getText().toString().length() == 0){
new AlertDialog.Builder(ContactDetails.this).setTitle("Error").setMessage("Email field cannot be empty!").setNeutralButton("Close", null).show();
} else{
contactData.putString("contactFirstName", nameField.getText().toString());
contactData.putString("contactMobilePhone", mobilePhoneField.getText().toString());
contactData.putString("contactEmail", emailField.getText().toString());
resultIntent.putExtra("contactData", contactData);
if (operationType.equals("addPerson")){
setResult(RESULT_FIRST_USER, resultIntent);
}else if (operationType.equals("modifyPerson")){
setResult(RESULT_MODIFY_USER, resultIntent);
}
finish();
}
}
});
cancelButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
Intent resultIntent = new Intent();
setResult(RESULT_CANCELED, resultIntent);
finish();
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == 1) {
// currImageURI is the global variable I'm using to hold the content:// URI of the image
currImageURI = data.getData();
getRealPathFromURI(currImageURI);
}
}
}
public String getRealPathFromURI(Uri currImageURI) {
// can post image
String [] proj={MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery( currImageURI,
proj, // Which columns to return
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null); // Order-by clause (ascending by name)
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
poza=(EditText)findViewById(R.id.editText1);
poza.setText(currImageURI.toString());
return cursor.getString(column_index);
}
}
第54行是:poza.setText(currimageri.toString())代码>
我认为出现错误是因为currimageURI没有值,但我使用了onActivityResult方法。你能帮我吗?当然可以。您编写了onActivityResult的方法,那又怎样?在执行onCreate
之后调用(如果调用)该方法,因此currimageri
在执行onCreate
时为null
只是不要在onCreate
中这样做。当currImageURI
不为空时,即在onActivityResult
方法中执行此操作。在方法onActivityResult(…)
中,将变量currImageURI
重新声明为局部变量,从而隐藏字段:
Uri currImageURI = data.getData(); // hiding the field currImageURI
相反,你应该这样做
currImageURI = data.getData(); // now it's fine
你在onActivityResult
@iancoslovak中两次重新声明变量currImageURI
,答案已经给出了。他希望你在那里写下整个类的答案@伊恩奥斯洛瓦克圣诞节是两天前。。。我们不能再赠送更多礼物了。您所说的被抛出的NullPointerException
问题应该通过此更改解决。如果仍然不是,那么您不应该对应用程序进行良好编码,您需要仔细跟踪。
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
if (requestCode == 1)
{
// currImageURI is the global variable I'm using to hold the content:// URI of the image
//Uri currImageURI = data.getData(); Replace this as follows
currImageURI = data.getData();
getRealPathFromURI(currImageURI);
}
}
}