gpt4 book ai didi

android - JSON 数组到 GridView 中的 ImageView

转载 作者:行者123 更新时间:2023-11-29 01:33:09 26 4
gpt4 key购买 nike

我在使用 json 数组在 gridview 中使用 picasso 填充 ImageView 时遇到了一些问题。

我想我已经完成了大部分,但是遇到了一个问题

我的计划是

a) 收集json数组b) 转换为 HashMap c) 添加一个数组列表d) 将 arraylist 传递给 ImageAdaptore) 设置 View 并添加正确的数据

我目前卡在 d 上,出现以下错误

Error:(97, 41) error: constructor ImageAdapter in class ImageAdapter cannot be applied to given types;
required: Context,ArrayList<HashMap<String,String>>
found: MainActivity.JSONParse,ArrayList<HashMap<String,String>>
reason: actual argument MainActivity.JSONParse cannot be converted to Context by method invocation conversion

不确定我做错了什么,但它让我难住了,而且谷歌搜索也无济于事

主要 Activity

    package com.example.alex.jsonparsegridview;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.GridView;
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);



}


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/phpscript.php";
JSONArray json = jParser.getJSONFromUrl(url);
return json;
}

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

JSONArray android = json;
String TAG_PATH = "path";
ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();

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

JSONObject c = android.getJSONObject(i);

// 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);


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

gridView.setAdapter(new ImageAdapter(this, oslist));

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


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

}
}
}

图像适配器

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 java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


public class ImageAdapter extends BaseAdapter {
private Context context;
ArrayList<HashMap<String, String>> dataList;

public ImageAdapter(Context context, ArrayList<HashMap<String, String>> oslist) {
this.context = context;
this.dataList = oslist;
}

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

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

View gridView;

if (convertView == null) {

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(((Map)getItem(position)).get("path").toString());

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


Picasso.with(context).load(((Map) getItem(position)).get("path").toString()).into(imageView);

} else {
gridView = (View) convertView;
}

return gridView;
}

@Override
public int getCount() {
return dataList.size();
}

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

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

}

提前致谢

最佳答案

问题是当您给出对 MainActivity.JSONParse 的引用而不是此处的 MainActivity 引用时:

gridView.setAdapter(new ImageAdapter(this, oslist));

this 实际上会为您提供 MainActivity.JSONParse,因为您是从 MainActivity 的内部类调用它;要获取您的 Activity 引用,您需要调用:MainActivity.this

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

关于android - JSON 数组到 GridView 中的 ImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30145965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com