getView方法在GridView中显示文本和图像? [英] getView method displaying text and image in a GridView?

查看:144
本文介绍了getView方法在GridView中显示文本和图像?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获得的文本,从网络服务器JSON图像,并把在网格视图
从服务器获取数据时,它的确定,但问题是获取视图

在这里只是试图让文本,但它会弹出错误的列表中的logcat有关getview方法

logcat的错误:

  20 02-15:51:13.628:E / AndroidRuntime(1135):致命异常:主要
02-15 20:51:13.628:E / AndroidRuntime(1135):显示java.lang.NullPointerException
02-15 20:51:13.628:E / AndroidRuntime(1135):在de.vogella.android.twitter.json.ParseJSON $ ImageAdapter.getView(ParseJSON.java:211)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.widget.AbsListView.obtainView(AbsListView.java:1315)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.widget.GridView.onMeasure(GridView.java:932)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.view.View.measure(View.java:8171)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.widget.LinearLayout.measureVertical(LinearLayout.java:381)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.view.View.measure(View.java:8171)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.view.View.measure(View.java:8171)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.view.View.measure(View.java:8171)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.view.View.measure(View.java:8171)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.view.ViewRoot.performTraversals(ViewRoot.java:801)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.os.Handler.dispatchMessage(Handler.java:99)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.os.Looper.loop(Looper.java:123)
02-15 20:51:13.628:E / AndroidRuntime(1135):在android.app.ActivityThread.main(ActivityThread.java:4627)
02-15 20:51:13.628:E / AndroidRuntime(1135):在java.lang.reflect.Method.invokeNative(本机方法)
02-15 20:51:13.628:E / AndroidRuntime(1135):在java.lang.reflect.Method.invoke(Method.java:521)
02-15 20:51:13.628:E / AndroidRuntime(1135):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
02-15 20:51:13.628:E / AndroidRuntime(1135):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-15 20:51:13.628:E / AndroidRuntime(1135):在dalvik.system.NativeStart.main(本机方法)

code:

 公共类ParseJSON延伸活动{
GridView控件MyGrid;
位图bmImg;
ImageView的imView;/ **当第一次创建活动调用。 * /
    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);        MyGrid =(GridView控件)findViewById(R.id.grid);
        MyGrid.setAdapter(新ImageAdapter(本));    }    公共类ImageAdapter延伸BaseAdapter {
        私人语境mContext;        公共ImageAdapter(上下文C){
            mContext = C;
        }
        公共字符串readTwitterFeed(){
            StringBuilder的建设者=新的StringBuilder();
            HttpClient的客户端=新DefaultHttpClient();
            HTTPGET HTTPGET =新HTTPGET(
                    http://www.zigwheels.com/api/zigtvApi.php?method=data&module=News&section=News);
            尝试{
                HTT presponse响应= client.execute(HTTPGET);
                状态行状态行= response.getStatusLine();
                INT状态code = statusLine.getStatus code();
                如果(状态code == 200){
                    HttpEntity实体= response.getEntity();
                    InputStream的内容= entity.getContent();
                    读者的BufferedReader =新的BufferedReader(
                            新的InputStreamReader(内容));
                    串线;
                    而((行= reader.readLine())!= NULL){
                        builder.append(线);
                    }
                }其他{
                    Log.e(ParseJSON.class.toString(),无法下载文件);
                }
            }赶上(ClientProtocolException E){
                e.printStackTrace();
            }赶上(IOException异常五){
                e.printStackTrace();
            }
            返回builder.toString();
        }
        公众诠释的getCount(){
            返回10;
        }        公共对象的getItem(INT位置){
            返回null;
        }        众长getItemId(INT位置){
            返回0;
        }        //创建由适配器引用的每个项目的新的ImageView
        公共查看getView(INT位置,查看convertView,父母的ViewGroup){
             查看MyView的= convertView;
            如果(convertView == NULL){//如果它没有回收,初始化一些属性
                 LayoutInflater李= getLayoutInflater();
                 MyView的= li.inflate(R.layout.main,NULL);            }
            TextView的电视=(TextView中)MyView.findViewById(R.id.grid_item_text);             尝试{
                 JSONArray jsonArray =新JSONArray(readTwitterFeed());                 的String []值=新的String [jsonArray.length()];
              的for(int i = 0; I< jsonArray.length();我++){                    的JSONObject的JSONObject = jsonArray.getJSONObject(I)                    的JSONObject = jsonArray.getJSONObject(ⅰ);
                     如果(位置< values​​.length){
                   值[I] = jsonObject.getString(标题);                   tv.setText(+值[位置]);
                     }
                }}赶上(JSONException E){                    e.printStackTrace();                }            返回MyView的;
        }}
}


解决方案

如果你的位置变量大于电流更大的I 中,对,你会得到一个NullPointerException异常,因为你不必在值[位置]的东西(这是发生,因为你复位getView()的每次调用值数组)。

试着这么做

 的for(int i = 0; I< jsonArray.length();我++){               的JSONObject的JSONObject = jsonArray.getJSONObject(I)                的JSONObject = jsonArray.getJSONObject(ⅰ);               值[I] = jsonObject.getString(标题);
               如果(位置< values​​.length)
                  tv.setText(+值[位置]);              //缩略图[I] = jsonObject.getString(缩略图);            }

i am trying to get text , image from json from web server and put in Grid View it's ok when obtaining data from the server but the problem is with get view

here is just trying to get the text but it pops up an list of error in logcat concerning the getview method

Logcat error:

02-15 20:51:13.628: E/AndroidRuntime(1135): FATAL EXCEPTION: main
02-15 20:51:13.628: E/AndroidRuntime(1135): java.lang.NullPointerException
02-15 20:51:13.628: E/AndroidRuntime(1135):     at de.vogella.android.twitter.json.ParseJSON$ImageAdapter.getView(ParseJSON.java:211)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.widget.AbsListView.obtainView(AbsListView.java:1315)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.widget.GridView.onMeasure(GridView.java:932)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.view.View.measure(View.java:8171)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:381)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.view.View.measure(View.java:8171)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.view.View.measure(View.java:8171)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.view.View.measure(View.java:8171)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.view.View.measure(View.java:8171)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.os.Looper.loop(Looper.java:123)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at java.lang.reflect.Method.invokeNative(Native Method)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at java.lang.reflect.Method.invoke(Method.java:521)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-15 20:51:13.628: E/AndroidRuntime(1135):     at dalvik.system.NativeStart.main(Native Method)

Code:

public class ParseJSON extends Activity {
GridView MyGrid;
Bitmap bmImg;
ImageView imView;

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MyGrid = (GridView)findViewById(R.id.grid);
        MyGrid.setAdapter(new ImageAdapter(this));

    }

    public class ImageAdapter extends BaseAdapter {
        private Context mContext;

        public ImageAdapter(Context c) {
            mContext = c;
        }


        public String readTwitterFeed() {
            StringBuilder builder = new StringBuilder();
            HttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(
                    "http://www.zigwheels.com/api/zigtvApi.php?method=data&module=News&section=News");
            try {
                HttpResponse response = client.execute(httpGet);
                StatusLine statusLine = response.getStatusLine();
                int statusCode = statusLine.getStatusCode();
                if (statusCode == 200) {
                    HttpEntity entity = response.getEntity();
                    InputStream content = entity.getContent();
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(content));
                    String line;
                    while ((line = reader.readLine()) != null) {
                        builder.append(line);
                    }
                } else {
                    Log.e(ParseJSON.class.toString(), "Failed to download file");
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return builder.toString();
        }


        public int getCount() {
            return 10;
        }

        public Object getItem(int position) {
            return null;
        }

        public long getItemId(int position) {
            return 0;
        }

        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent) {
             View MyView = convertView;


            if (convertView == null) {  // if it's not recycled, initialize some attributes
                 LayoutInflater li = getLayoutInflater();
                 MyView = li.inflate(R.layout.main, null);



            }
            TextView    tv = (TextView)MyView.findViewById(R.id.grid_item_text);







             try{
                 JSONArray  jsonArray = new JSONArray(readTwitterFeed());

                 String[] values = new String[jsonArray.length()] ;


              for (int i = 0; i < jsonArray.length(); i++) {

                    JSONObject jsonObject = jsonArray.getJSONObject(i);

                    jsonObject = jsonArray.getJSONObject(i);
                     if( position < values.length){
                   values[i] =jsonObject.getString("headline");

                   tv.setText(""+ values[position] );
                     }




                }}catch(JSONException e){

                    e.printStackTrace();

                }





            return MyView;
        }



}
























}

解决方案

If your position variable is greater than current i in that for, you will get a NullPointerException because you do not have something in values[position] (this is happen because your reset the values array on every call of getView()).

Try something like

for (int i = 0; i < jsonArray.length(); i++) {

               JSONObject jsonObject = jsonArray.getJSONObject(i);

                jsonObject = jsonArray.getJSONObject(i);

               values[i] =jsonObject.getString("headline");
               if( position < values.length)
                  tv.setText(""+ values[position] );

              // thumbnail[i] =jsonObject.getString("thumbnail");

            }

这篇关于getView方法在GridView中显示文本和图像?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆