1

Jsonアンドロイド、私は画像とテキストをロードするjsonを持っていますが、完璧に動作しますが、画像はテキストと一致しません、画像は骨とテキストを繰り返します、私は間違っています、私は初心者です

public class CustomAdapter extends BaseAdapter {

    LayoutInflater inflator;
    ArrayList<JSONFields> result;

    public CustomAdapter(Context context, ArrayList<JSONFields> result) {
        // TODO Auto-generated constructor stub

        inflator = LayoutInflater.from(context);
        this.result = result;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return result.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        Holder holder;
        DownloadImageTask task = null;
        if (convertView == null) {
            holder = new Holder();
            convertView = inflator.inflate(R.layout.helper, null);
            holder.image = (ImageView) convertView
                    .findViewById(R.id.imageView1);
            holder.textview1 = (TextView) convertView
                    .findViewById(R.id.textView1);
            holder.descrip = (TextView) convertView
                    .findViewById(R.id.descripcion);


            task = new DownloadImageTask(holder.image);
            convertView.setTag(holder);

        } else {
            holder = (Holder) convertView.getTag();
        }

        JSONFields fields = new JSONFields();

        fields = result.get(position);
        if (task != null)
            task.execute(fields.getUrl());


        holder.textview1.setText(fields.getName());
        holder.descrip.setText(fields.getDescripcion());



        return convertView;

    }

    public class Holder {
        ImageView image;
        TextView textview1;
        TextView descrip;
    }

    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        ImageView bmImage;

        public DownloadImageTask(ImageView bmImage) {
            this.bmImage = bmImage;


        }

        protected Bitmap doInBackground(String... urls) {
            String urldisplay = urls[0];
            Bitmap mIcon11 = null;
            try {
                InputStream in = new java.net.URL(urldisplay).openStream();
                mIcon11 = BitmapFactory.decodeStream(in);
                in.close();
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return mIcon11;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
    }

}



import com.ditec.json.data.JSONFields;

public class MainActivity extends Activity {

    public static final String URL = "http://169.254.65.190:5000/fbsharing/7BkWVF6r";
    ListView listview;

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

        listview = (ListView) findViewById(R.id.listView1);

        GetJSON json = new GetJSON();
        json.execute(URL);

    }

    public class GetJSON extends AsyncTask<String, Void, ArrayList<JSONFields>> {

        @Override
        protected ArrayList<JSONFields> doInBackground(String... params) {
            // TODO Auto-generated method stub

            try {
                String url = params[0];
                HttpClient client = new DefaultHttpClient();
                HttpGet get = new HttpGet(url);
                HttpResponse response;
                response = client.execute(get);
                InputStream content = response.getEntity().getContent();
                BufferedReader reader;
                reader = new BufferedReader(new InputStreamReader(content, "iso-8859-1"), 8);
                String line;
                String json = "";
                while ((line = reader.readLine()) != null) {
                    json += line;
                }

                JSONArray array = new JSONArray(json);
                ArrayList<JSONFields> alData = new ArrayList<JSONFields>();
                for (int i = 0; i < array.length(); i++) {

                    JSONFields data = new JSONFields();
                    JSONObject obj = array.getJSONObject(i);

                    data.setUrl(obj.getString("url"));
                    data.setName(obj.getString("name"));
                    data.setDescription(obj.getString("descripcion"));
                    alData.add(data);
                }
                System.out.println("Data returned sucessfully");
                return alData;

            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(ArrayList<JSONFields> result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            CustomAdapter adapter = new CustomAdapter(MainActivity.this, result);

            listview.setAdapter(adapter);

        }
    }

}



public class JSONFields {

    private String name;
    private String url;
    private String descripcion;

    public String getName() {
        return name;
    }
    public String getUrl() {
        return url;
    }
    public String getDescripcion() {
        return descripcion;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public void setDescription(String descripcion) {
        this.descripcion = descripcion;
    }

}
4

2 に答える 2

1

JSONにはVolleyライブラリを使用し、画像を取得するための簡単な実装も使用します。その非常に効率的です。

例: http://www.kpbird.com/2013/05/volley-easy-fast-networking-for-android.html

ImageDownload の場合は NetworkImageView です。: http://www.jayway.com/2013/08/20/volley-networking-for-android/

そして、ほんの数行のコードです。私はいつもこれを使っています。

于 2013-09-05T15:10:10.710 に答える
0

これを見て投稿してください。テキストと一致しない画像があるという正確な問題に対処します(画像の読み込み中にビューが再利用/リサイクルされるため)。 画像を含むリストビューですが、リストをスクロールすると、画像が間違った行に表示されます 。これを簡単に修正するには、画像ビューで setTag と getTag を使用して、表示する画像を識別する文字列 (URL など) を設定します。イメージビューを読み込んでから、イメージビュー (convertview) がリサイクルされた場合をキャッチして、イメージをロードしていないときでもタグが同じであることを確認します。

于 2013-09-07T12:48:31.050 に答える