Java Android GridView重画问题

Java Android GridView重画问题,java,android,gridview,Java,Android,Gridview,我已经创建了一个应用程序,允许用户拍照,上传到网络服务器。然后,此图像在活动内的gridview上可见 我觉得一切正常,但是我拍的照片越多,我注意到的问题就越多 当用户开始滚动时,gridview中的图像似乎正在重新绘制,有效地再次向用户显示相同的图像(不总是以相同的顺序) 我曾读过其他一些帖子,人们都在为类似的事情而挣扎,但这些修复方法似乎对我不起作用 提前谢谢你的帮助 这是我的gridview活动 package com.example.alex.jsonparsegridview; i

我已经创建了一个应用程序,允许用户拍照,上传到网络服务器。然后,此图像在活动内的gridview上可见

我觉得一切正常,但是我拍的照片越多,我注意到的问题就越多

当用户开始滚动时,gridview中的图像似乎正在重新绘制,有效地再次向用户显示相同的图像(不总是以相同的顺序)

我曾读过其他一些帖子,人们都在为类似的事情而挣扎,但这些修复方法似乎对我不起作用

提前谢谢你的帮助

这是我的gridview活动

package com.example.alex.jsonparsegridview;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

public class MainActivity extends Activity {

    GridView gridView;

    static final String[] MOBILE_OS = new String[]{
            "Android", "iOS", "Windows", "Blackberry"};

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new JSONParse().execute();

        TextView tv = (TextView)findViewById(R.id.footerText);


        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent myIntent = new Intent(MainActivity.this, CameraActivity.class);
                myIntent.putExtra("dir", "BS"); //Optional parameters
                MainActivity.this.startActivity(myIntent);
            }
        });


    }


    private class JSONParse extends AsyncTask<String, String, JSONArray> {
        private ProgressDialog pDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Getting Data ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();

        }

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

            JSONParser jParser = new JSONParser();

            // Getting JSON from URL

            String url = "http://www.500kgiveaway.co.uk/getimagesmob.php";
            JSONArray json = jParser.getJSONFromUrl(url);
            return json;
        }

        @Override
        protected void onPostExecute(JSONArray json) {
            pDialog.dismiss();
                // Getting JSON Array from URL

                JSONArray android = json;


                //copied from onCreate
                gridView = (GridView) findViewById(R.id.gridView1);

                gridView.setAdapter(new ImageAdapter(MainActivity.this, android));

                gridView.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View v,
                                            int position, long id) {
                        Toast.makeText(
                                getApplicationContext(),
                                ((TextView) v.findViewById(R.id.grid_item_label))
                                        .getText(), Toast.LENGTH_SHORT).show();
                    }
                });

                //End Copy





        }
    }
}
package com.example.alex.jsonparsegridview;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.widget.AdapterView;
导入android.widget.GridView;
导入android.widget.ImageView;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入android.view.view;
导入android.widget.AdapterView.OnItemClickListener;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.HashMap;
公共类MainActivity扩展了活动{
GridView;
静态最终字符串[]移动操作系统=新字符串[]{
“安卓”、“iOS”、“Windows”、“黑莓”};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
新建JSONParse().execute();
TextView tv=(TextView)findViewById(R.id.footerText);
tv.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Intent myIntent=新的Intent(MainActivity.this、CameraActivity.class);
myIntent.putExtra(“dir”、“BS”);//可选参数
MainActivity.this.startActivity(myIntent);
}
});
}
私有类JSONParse扩展了异步任务{
私人对话;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(MainActivity.this);
setMessage(“获取数据…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
@凌驾
受保护的JSONArray doInBackground(字符串…args){
JSONParser jParser=新的JSONParser();
//从URL获取JSON
字符串url=”http://www.500kgiveaway.co.uk/getimagesmob.php";
JSONArray json=jParser.getJSONFromUrl(url);
返回json;
}
@凌驾
受保护的void onPostExecute(JSONArray json){
pDialog.disclose();
//从URL获取JSON数组
JSONArray android=json;
//从onCreate复制
gridView=(gridView)findViewById(R.id.gridView1);
setAdapter(新的ImageAdapter(MainActivity.this,android));
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
Toast.makeText(
getApplicationContext(),
((文本视图)v.findViewById(R.id.grid\u item\u label))
.getText(),Toast.LENGTH_SHORT).show();
}
});
//结束副本
}
}
}
这是我的图像适配器(毕加索定制)

package com.example.alex.jsonparsegridview;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
导入com.squareup.picasso.picasso;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
公共类ImageAdapter扩展了BaseAdapter{
私人语境;
私有JSONArray android;
私有字符串TAG_PATH=“PATH”;
ArrayList oslist=新的ArrayList();
公共ImageAdapter(上下文上下文,JSONArray android){
this.context=上下文;
this.android=android;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图gridView=null;
试一试{
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
JSONObject c=android.getJSONObject(位置);
//在变量中存储JSON项
字符串路径=c.getString(标记路径);
//添加值HashMap key=>value
HashMap=newHashMap();
地图放置(标记路径,路径);
添加(地图);
gridView=新视图(上下文);
//从mobile.xml获取布局
gridView=充气机。充气(R.layout.mobile,空);
//将值设置为textview
TextView TextView=(TextView)gridView
.findViewById(R.id.grid\u item\u标签);
textView.setText(path.toString());
//基于选定文本设置图像
ImageView ImageView=(ImageView)gridView
.findviewbyd(R.id.grid\u item\u image);
圆周率
package com.example.alex.jsonparsegridview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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


public class ImageAdapter extends BaseAdapter {
    private Context context;
    private JSONArray android;
    private String TAG_PATH = "path";
    ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();


    public ImageAdapter(Context context,  JSONArray android) {
        this.context = context;
        this.android = android;
    }

    public View getView(int position, View convertView, ViewGroup parent) {


        View gridView = null;

             try {
                 if (convertView == null) {

                     LayoutInflater inflater = (LayoutInflater) context
                             .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


                 JSONObject c = android.getJSONObject(position);

                // Storing  JSON item in a Variable
                String path = c.getString(TAG_PATH);

                // Adding value HashMap key => value

                HashMap<String, String> map = new HashMap<String, String>();

                map.put(TAG_PATH, path);

                oslist.add(map);

                gridView = new View(context);

                // get layout from mobile.xml
                gridView = inflater.inflate(R.layout.mobile, null);

                // set value into textview
                TextView textView = (TextView) gridView
                        .findViewById(R.id.grid_item_label);
                textView.setText(path.toString());

                // set image based on selected text
                ImageView imageView = (ImageView) gridView
                        .findViewById(R.id.grid_item_image);


                Picasso.with(context).load("http://www.500kgiveaway.co.uk/" + path).resize(400,400).into(imageView);

                 } else {
                     gridView = (View) convertView;
                 }

             } catch (JSONException e) {
                e.printStackTrace();
            }

        return gridView;
    }

    @Override
    public int getCount() {
       return android.length();
    }

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

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

}
public View getView(int position, View convertView, ViewGroup parent) {

    View gridView = null;

    try {
        if (convertView == null) {
             LayoutInflater inflater = (LayoutInflater) context
                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

             gridView = new View(context);

             // get layout from mobile.xml
             gridView = inflater.inflate(R.layout.mobile, null);              
        }
        else
        {
             gridView = convertView;
        }

        JSONObject c = android.getJSONObject(position);

        // Storing  JSON item in a Variable
        String path = c.getString(TAG_PATH);

        // set value into textview
        TextView textView = (TextView) gridView
                .findViewById(R.id.grid_item_label);
        textView.setText(path.toString());

        // set image based on selected text
        ImageView imageView = (ImageView) gridView
                .findViewById(R.id.grid_item_image);

        Picasso.with(context).load("http://www.500kgiveaway.co.uk/" + path).resize(400,400).into(imageView);

        // Adding value HashMap key => value
        HashMap<String, String> map = new HashMap<String, String>();
        map.put(TAG_PATH, path);
        // TODO: add some checks so you don't add it if it's already in the list? 
        oslist.add(map);

     } catch (JSONException e) {
        e.printStackTrace();
    }

    return gridView;
}