android - 我的 gridview 不工作,因为找不到 id

标签 android gridview grid

这是我的代码:

package com.example.whs;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ActionBar;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;

public class ViewAlbum extends ListActivity {
    // Progress Dialog
    private ProgressDialog pDialog;

    // Creating JSON Parser object
    JSONParser fotoJParser = new JSONParser();

    // Array for the list
    ArrayList<HashMap<String, String>> photoList;

    // JSON variables
    public static final String TAG_SUCCESS = "success";
    public static final String TAG_MESSAGE = "message"; 

    //JSON array
    JSONArray items = null;

    GridView grid;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_albums);

        // Set actionbar
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);

        // HashMap for the items
        photoList = new ArrayList<HashMap<String, String>>();

        GridView grid = (GridView) findViewById(R.id.grid);;

        // Loading the items on the background
        new LoadAllItems().execute();       
    }

    // class for loading all items
    class LoadAllItems extends AsyncTask<String, String, String> {
        private static final String TAG_ID = "id";
        private static final String TAG_ITEMS = "items";
        public String TAG_NAME = "name";


        // Before 
        @Override
        protected void onPreExecute(){
            super.onPreExecute();
            pDialog = new ProgressDialog(ViewAlbum.this);
            pDialog.setMessage("Foto's laden...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        // Get the products     
        @Override
        protected String doInBackground(String... params) {
            // Build Parameters
            List<NameValuePair> params1 = new ArrayList<NameValuePair>();

            // get the id
            Intent intent = getIntent();
            String id = intent.getStringExtra(TAG_ID);

            params1.add(new BasicNameValuePair("id", id));

            // url to get the items
            String url_foto = "<here is my url>";

            //Get the JSON string           
            JSONObject json = fotoJParser.makeHttpRequest(url_foto, "POST", params1);

            try {
                // check for success tag
                int success = json.getInt(TAG_SUCCESS);

                if(success == 1) {
                    // found the items
                    items = json.getJSONArray(TAG_ITEMS);

                    // loop through the items
                    for (int i = 0; items.length() > i; i++){
                        // Get the item in variable c
                        JSONObject s = items.getJSONObject(i);

                        // Store in a variable
                        String name = s.getString(TAG_NAME);

                        // Create the HashMap
                        HashMap<String, String> map = new HashMap<String, String>();

                        // add it
                        map.put(TAG_NAME, name);

                        // to arraylist
                        photoList.add(map);                     
                    }
                }else{
                    //
                }
            } catch (JSONException e){
                throw new RuntimeException(e);
            }
            return null;
        }       


        protected void onPostExecute(String result){
            // dismiss dialog
            pDialog.dismiss();      
            // Add adapter to the list
            ViewAlbumAdapter adapter = new ViewAlbumAdapter(ViewAlbum.this, photoList);
            grid.setAdapter(adapter);
            grid.setOnItemClickListener(new OnItemClickListener(){
                public void onItemClick(AdapterView<?> a, View v,
                        int position, long id) {
                // do something
                }
            });
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return false;
        // to do
    }

}

问题是他找不到gridview。 gridview 的 id 是 android:id="@+id/grid"。日志在带有 grid.setAdapter(adapter) 的行上给出错误。错误是 java.lang.NullPointerException

我试过在findViewById前加上getActivity(),但是他不识别方法getActivity()。

最佳答案

取出变量阴影:

GridView grid = (GridView) findViewById(R.id.grid);;

应该是

grid = (GridView) findViewById(R.id.grid);

您已经将 grid 声明为实例变量。通过在 onCreate() 中再次重新声明它,您将实例 grid 保留为空。

关于android - 我的 gridview 不工作,因为找不到 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191817/

相关文章:

android - 为页眉和页脚添加一个 TextView

class - Bootstrap 3 col-sm-offset-x 影响 col-md-x 结构

javascript - 为什么我的 ExtJS 网格中的按钮显示为 "[object Object]"?

android - 如何为android方法和类编写单元测试?

android - 无法解析符号 : FusedLocationProviderClient. 使用的 Google Play 服务版本 11.0.1

android - 尝试动态插入相对布局时获取 ClassCastException?

android - 如何从服务调用 Activity 中的方法

android - ListView/GridView 中按下项目的默认背景颜色

c# - 有没有办法将 GridView 中的按钮变成链接文本?

javascript - ExtJs 4 中的通用模型