NullPointerException:尝试在空对象引用上调用虚拟方法 AlertDialog.setTitle(java.lang.CharSequence) [重复]
Posted
技术标签:
【中文标题】NullPointerException:尝试在空对象引用上调用虚拟方法 AlertDialog.setTitle(java.lang.CharSequence) [重复]【英文标题】:NullPointerException: Attempt to invoke virtual method AlertDialog.setTitle(java.lang.CharSequence) on a null object reference [duplicate] 【发布时间】:2015-06-05 15:51:33 【问题描述】:这是错误:
04-01 10:37:47.077 2310-2326/zonup.asyc D/Create 响应: "success":"false","msg":"请输入邮箱!!!" 04-01 10:37:47.084 2310-2310/zonup.asyc D/androidRuntime: 关闭虚拟机 04-01 10:37:47.084 2310-2310/zonup.asyc E/AndroidRuntime: 致命 例外:主要 进程:zonup.asyc,PID:2310 java.lang.NullPointerException:尝试调用虚拟方法“void android.app.AlertDialog.setTitle(java.lang.CharSequence)” 空对象引用 在 zonup.asyc.MainActivity$SignmeUp.onPostExecute(MainActivity.java:122) 在 zonup.asyc.MainActivity$SignmeUp.onPostExecute(MainActivity.java:70) 在 android.os.AsyncTask.finish(AsyncTask.java:632) 在 android.os.AsyncTask.access$600(AsyncTask.java:177) 在 android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5221) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
public class MainActivity extends ActionBarActivity
protected String stmail;
protected EditText editText;
protected Button button;
AlertDialog alertDialog;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=(EditText) findViewById(R.id.editText);
stmail=editText.getText().toString();
button=(Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
new SignmeUp().execute();
);
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
@Override
public boolean onOptionsItemSelected(MenuItem item)
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings)
return true;
return super.onOptionsItemSelected(item);
class SignmeUp extends AsyncTask<String, String, String>
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
@Override
protected void onPreExecute()
super.onPreExecute();
runOnUiThread(new Runnable()
@Override
public void run()
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Thanks for your Sign up...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
);
@Override
protected String doInBackground(String... arg0)
// TODO Auto-generated method stub
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("email", stmail));
// getting JSON Object
// Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest("http://api.php","GET", params);
// check log cat fro response
Log.d("Create Response", json.toString());
// check for success tag
try
String success = json.getString("success");
if (stmail != null & success == "true")
Toast.makeText(MainActivity.this, "Youre Email Posted..", Toast.LENGTH_SHORT).show();
else
catch (JSONException e)
e.printStackTrace();
return null;
@SuppressWarnings("deprecation")
protected void onPostExecute(String file_url)
// dismiss the dialog once done
editText.setText("");
alertDialog.setTitle("Info");
alertDialog.setMessage("You have been subscribed o the ");
alertDialog.setButton("OK", new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int which)
// here you can add functions
);
alertDialog.show();
【问题讨论】:
放置 AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);以上 alertDialog.setTitle("Info");行 移除 super.onPreExecute(); 你在哪里初始化了 AlertDialog? 我已经粘贴了完整的代码@shvet 【参考方案1】:使用 AlertDialog.Builder 而不是使用 AlertDialog。由于 AlertDialog 已被弃用。您还需要显示进度对话框。
@Override
protected void onPreExecute()
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Thanks for your Sign up...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
在onPostExecute
方法dismiss
中的进度条。同时使用 AlertDialog.Builder。
protected void onPostExecute(String file_url)
// dismiss the dialog once done
if(pDialog.isShowing())
pDialog.dismiss();
editText.setText("");
AlertDailog.Builder builder = new AlertDialog.Builder(Activity.this);
builder.setText("");
builder.setMessege("");
builder.create().show();
);
【讨论】:
@manikanta 你试过我的解决方案了吗? 工作谢谢@shvet【参考方案2】:您在dialog.setTitle("Info")
上有一个空指针异常,但看起来您确实应该调用pDialog.setTitle("Info")
,因为您在onPreExecute
中初始化的对话框是pDialog
而不是alertDialog
【讨论】:
【参考方案3】:你试着给你编码
你试试 onPreExecute 方法
private ProgressDialog PD;
if(PD == null)
//
PD = new ProgressDialog(SplashScreenActivity.this);
PD.setMessage("Please Wait..");
PD.setIndeterminate(false);
PD.setCancelable(true);
PD.show();
然后你在方法 onPostExecute 中关闭 PrpgressDialog
if(PD.isShowing())
PD.dismiss();
goNext();
【讨论】:
以上是关于NullPointerException:尝试在空对象引用上调用虚拟方法 AlertDialog.setTitle(java.lang.CharSequence) [重复]的主要内容,如果未能解决你的问题,请参考以下文章
NullPointerException 尝试在空对象引用上调用 method.GoogleMap.setMapType(int)'
数据库错误:“NullPointerException:尝试在空对象引用上调用虚拟方法 getApplicationInfo()...”[重复]
原因:java.lang.NullPointerException:尝试在空对象引用上调用接口方法
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ActionBar.setNavigationMode(int)”
NullPointerException:尝试在空对象引用上调用虚拟方法 AlertDialog.setTitle(java.lang.CharSequence) [重复]
NullPointerException:尝试在空对象引用上调用虚拟方法“int java.util.ArrayList.size()”