Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么当我尝试在Android中打开一个对话框时会出现NullPointerException?_Java_Android_Nullpointerexception_Android Studio - Fatal编程技术网

Java 为什么当我尝试在Android中打开一个对话框时会出现NullPointerException?

Java 为什么当我尝试在Android中打开一个对话框时会出现NullPointerException?,java,android,nullpointerexception,android-studio,Java,Android,Nullpointerexception,Android Studio,我试图在单击按钮时打开一个对话框。该对话框基本上列出了一些从数据库中获取的项目。所以我运行一个AsynTask从数据库中获取项目,然后调用setAdapter在对话框中列出它们。但我总是得到一个空点异常。我是Android编程新手,可能做错了什么。谁能帮帮我吗。以下是我的代码: public class nextPub extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) {

我试图在单击按钮时打开一个对话框。该对话框基本上列出了一些从数据库中获取的项目。所以我运行一个AsynTask从数据库中获取项目,然后调用setAdapter在对话框中列出它们。但我总是得到一个空点异常。我是Android编程新手,可能做错了什么。谁能帮帮我吗。以下是我的代码:

public class nextPub extends ActionBarActivity {

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_next_pub);

    leave = (Button) findViewById(R.id.nextPub_leave_button);

    oslist = new ArrayList<HashMap<String, String>>();

    leave.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                new listPubs().execute();
                new PubListDialog().onCreateDialog(b).show();
            }
    });
}

private class PubListDialog extends DialogFragment {
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
       builder.setTitle("Which pub next ?").setAdapter(new SimpleAdapter(nextPub.this, oslist,
                R.layout.list_pubs, new String[]{TAG_pubname}, new int[]{
                R.id.list_pubname}
        ), new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // The 'which' argument contains the index position
                // of the selected item
                Toast.makeText(nextPub.this, "You Clicked at Pub : " + oslist.get(+which).get(TAG_pubname), Toast.LENGTH_SHORT).show();
            }
        });

        return builder.create();
    }
}

private class listPubs extends AsyncTask<String, String, JSONObject> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(nextPub.this);
        pDialog.setMessage("Loading Pubs..");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected JSONObject doInBackground(String... args) {

        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tag", "list_pubs"));
        params.add(new BasicNameValuePair("owner", ownerName));

        Log.d("calling", "Json");
        // getting JSON Object
        // Note that create product url accepts POST method
        JSONObject json = jsonParser.makeServiceCall(url,
                2, params);

        // check log cat fro response
        Log.d("Create Response", json.toString());
        return json;
    }

    @Override
    protected void onPostExecute(JSONObject json) {
        pDialog.dismiss();
        try {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {

                // Getting JSON Array from URL
                android = json.getJSONArray(TAG_array);
                for (int i = 0; i < android.length(); i++) {
                    JSONObject c = android.getJSONObject(i);
                    String pubname = c.getString(TAG_pubname);
                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put(TAG_pubname, pubname);
                    oslist.add(map);
                }

            } else {
                Toast.makeText(nextPub.this, "NO Pubs Listed", Toast.LENGTH_SHORT).show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
公共类nextPub扩展了ActionBarActivity{
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u next\u pub);
离开=(按钮)findViewById(R.id.nextPub\u离开按钮);
oslist=newarraylist();
leave.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
新建listPubs().execute();
新建PubListDialog().onCreateDialog(b.show();
}
});
}
私有类PubListDialog扩展了DialogFragment{
创建对话框上的公共对话框(Bundle savedInstanceState){
AlertDialog.Builder=新建AlertDialog.Builder(getActivity());
builder.setTitle(“下一个发布是哪个?”).setAdapter(新的SimpleAdapter)(nextPub.this,oslist,
R.layout.list_pubs,新字符串[]{TAG_pubname},新int[]{
R.id.list_pubname}
),新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
//“which”参数包含索引位置
//所选项目的名称
Toast.makeText(nextPub.this),您在Pub上单击:“+oslist.get(+which).get(TAG_pubname),Toast.LENGTH_SHORT.show();
}
});
返回builder.create();
}
}
私有类listPubs扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=newprogressdialog(nextPub.this);
pDialog.setMessage(“加载pub..”;
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
@凌驾
受保护的JSONObject doInBackground(字符串…args){
//建筑参数
List params=new ArrayList();
参数添加(新的BasicNameValuePair(“标签”、“列表”);
添加参数(新的BasicNameValuePair(“所有者”,所有者名称));
Log.d(“调用”、“Json”);
//获取JSON对象
//请注意,创建产品url接受POST方法
JSONObject json=jsonParser.makeServiceCall(url,
2、参数;
//检查cat fro响应日志
d(“创建响应”,json.toString());
返回json;
}
@凌驾
受保护的void onPostExecute(JSONObject json){
pDialog.disclose();
试一试{
int success=json.getInt(TAG_success);
如果(成功==1){
//从URL获取JSON数组
android=json.getJSONArray(标记数组);
for(int i=0;i
}

以下是我单击对话框按钮时出现的错误:
java.lang.NullPointerException
在android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:143)上
在android.app.AlertDialog$Builder上。(AlertDialog.java:360)
在com.example.pubscrawapp.app.nextPub$PubListDialog.onCreateDialog(nextPub.java:135)上
位于com.example.pubscrawapp.app.nextPub$1.onClick(nextPub.java:106)
在android.view.view.performClick上(view.java:4633)
在android.view.view$PerformClick.run(view.java:19330)
位于android.os.Handler.handleCallback(Handler.java:733)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:157)
位于android.app.ActivityThread.main(ActivityThread.java:5356)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1265)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
在dalvik.system.NativeStart.main(本机方法)

您不应该手动调用
onCreateDialog()
。框架将在适当的时候为您调用它。在节目中,, 呼叫应如下所示:

// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(ft, "dialog");

您不应该手动调用
onCreateDialog()
。框架将在适当的时候为您调用它。在节目中,, 呼叫应如下所示:

// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(ft, "dialog");

如果这回答了您的问题,请将此问题标记为已回答。如果这回答了您的问题,请将此问题标记为已回答。