我想在网格视图中显示我的用户(带图像)我的jSON,在数组中给出正确的响应
但在解析Json后,数据不会显示在网格视图中
我的日志猫没有给我任何错误只是显示
06-05 12:21:12.269: I/Choreographer(4047): Skipped 1134 frames! The application may be doing too much work on its main thread.
这是我的活动
public class MeetPeople extends Activity {
private ProgressDialog pDialog;
private GridView gridView;
//private GridViewAdapter customGridAdapter;
// URL to get contacts JSON
private static String url = "http://www.get2love.webitexperts.com/nearbyusers";
// JSON Node names
private static final String TAG_CONTACTS = "";
private static final String TAG_ID = "User_Id";
private static final String TAG_NAME = "User_Full_Name";
private static final String TAG_IMAGE = "User_Image";
// contacts JSONArray
JSONArray contacts = null;
// Hashmap for ListView
ArrayList<HashMap<String, String>> contactList;
GridViewAdapter customGridAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.meetpeople);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
contactList = new ArrayList<HashMap<String, String>>();
// Calling async task to get json
new GetContacts().execute();
//ListView lv = getListView();
gridView = (GridView) findViewById(R.id.gridView);
customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, contactList);
gridView.setAdapter(customGridAdapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,int position, long id) {
Toast.makeText(MeetPeople.this, position + "#Selected",Toast.LENGTH_SHORT).show();
}
});
}
/**
* Async task class to get json by making HTTP call
* */
private class GetContacts extends AsyncTask<Void, Void, ArrayList<HashMap<String, String>>> {
ArrayList<HashMap<String, String>> contact_List = new ArrayList<HashMap<String, String>>();
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MeetPeople.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected ArrayList<HashMap<String, String>> doInBackground(Void... arg0) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
UserModel user = (UserModel) getIntent().getSerializableExtra("User");
String ID=String.valueOf(user.getUser_Id());
String DST=String.valueOf(100);
params.add(new BasicNameValuePair("id",ID));
params.add(new BasicNameValuePair("distance", DST));
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.POST, params);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr != null) {
try {
JSONArray contacts = new JSONArray(jsonStr);
// Getting JSON Array node
// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String User_Id = c.getString(TAG_ID);
String User_Full_Name = c.getString(TAG_NAME);
String User_Image=c.getString(TAG_IMAGE);
// Phone node is JSON Object
// tmp hashmap for single contact
HashMap<String, String> contact = new HashMap<String, String>();
// adding each child node to HashMap key => value
contact.put(TAG_ID, User_Id);
contact.put(TAG_NAME, User_Full_Name);
contact.put(TAG_IMAGE, User_Image);
// adding contact to contact list
contact_List.add(contact);
}
return contact_List;
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(final ArrayList<HashMap<String, String>> result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
contact_List=result;
gridView = (GridView) findViewById(R.id.gridView);
customGridAdapter = new GridViewAdapter(MeetPeople.this, R.layout.row_grid, contactList);
gridView.setAdapter(customGridAdapter);
/*runOnUiThread( new Runnable() {
public void run() {
contactList=result;
}
});*/
/**
* Updating parsed JSON data into ListView
* */
/*ListAdapter adapter = new SimpleAdapter(
MeetPeople.this, contactList,
R.layout.row_grid, new String[] { TAG_NAME
}, new int[] { R.id.name });
setAdapter(customGridAdapter);*/
}
}
}
这是我的GridViewAdapter
public class GridViewAdapter extends BaseAdapter {
private Context context;
private int layoutResourceId;
private ArrayList<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
public GridViewAdapter(Context context, int layoutResourceId,ArrayList<HashMap<String, String>> data) {
// super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.imageTitle = (TextView) row.findViewById(R.id.text);
holder.image = (ImageView) row.findViewById(R.id.image);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
// ImageItem item = data.get(position);
holder.imageTitle.setText(getItem(position, "TAG_NAME"));
holder.image.setImageBitmap(getImage(position));
return row;
}
static class ViewHolder {
TextView imageTitle;
ImageView image;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
public String getItem(int arg0,String key) {
return data.get(arg0).get(key);
}
public Bitmap getImage(int pos){
String url = data.get(pos).get("TAG_IMAGE");
MemoryCache memoryCache=new MemoryCache();
Bitmap bitmap=memoryCache.get(url);
if(bitmap!=null)
// imageView.setImageBitmap(bitmap);
return bitmap;
else
{
// queuePhoto(url, imageView);
// imageView.setImageResource(loader);
}
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
}
这是我的日志
06-05 12:20:47.039: D/StrictMode(4047): at dalvik.system.NativeStart.main(Native Method)
06-05 12:20:53.799: D/Response:(4047): > [{"User_Id":"49","User_Full_Name":"meet","User_Image":""},{"User_Id":"50","User_Full_Name":"meet","User_Image":"http:\/\/www.get2love.webitexperts.com\/profile_images\/1400754860profile.jpg"},{"User_Id":"51","User_Full_Name":"meet","User_Image":"http:\/\/www.get2love.webitexperts.com\/profile_images\/1400756097profile.jpg"},{"User_Id":"71","User_Full_Name":"hh","User_Image":"http:\/\/www.get2love.webitexperts.com\/profile_images\/1401479271profile.jpg"},{"User_Id":"72","User_Full_Name":"hh","User_Image":"http:\/\/www.get2love.webitexperts.com\/profile_images\/1401479340profile.jpg"},{"User_Id":"73","User_Full_Name":"lkjh","User_Image":"http:\/\/www.get2love.webitexperts.com\/profile_images\/1401479662profile.jpg"},{"User_Id":"76","User_Full_Name":"jhon","User_Image":"http:\/\/www.get2love.webitexperts.com\/profile_images\/1401714195profile.jpg"},{"User_Id":"79","User_Full_Name":"sammy","User_Image":"http:\/\/www.get2love.webitexperts.com\/profile_images\/1401889294profile.jpg"}]
06-05 12:21:12.269: I/Choreographer(4047): Skipped 1134 frames! The application may be doing too much work on its main thread.
06-05 12:21:38.829: I/Choreographer(4047): Skipped 1533 frames! The application may be doing too much work on its main thread.
有人能解决我的问题吗?我想在GridView(UserImage)中显示这些响应
请先谢谢你
在代码中编辑后的新logcat。。。。根据Answer
06-05 13:22:22.849: E/Trace(8790): error opening trace file: No such file or directory (2)
06-05 13:23:41.839: E/Buffer Error(8790): Error converting result java.lang.NullPointerException
06-05 13:23:41.839: E/JSON Parser(8790):解析数据org.json.JSONException:在06-05 13:23:51.759的字符0处输入结束: E/AndroidRuntime(8790): FATAL EXCEPTION: AsyncTask#1 06-05 13:23:51.759: E/AndroidRuntime(8790):java.lang.RuntimeException:在执行doInbackground()06-05 13:23:51.759: E/AndroidRuntime(8790): atandroid.os.AsyncTask$3.done(AsyncTask.java:299)06-05 13:23:51.759: E/AndroidRuntime(8790): atjava.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)06-05 13:23:51.759: E/AndroidRuntime(8790): atjava.util.concurrent.FutureTask.setException(FutureTask.java:124)06-05 13:23:51.759: E/AndroidRuntime(8790java.util.concurrent.FutureTask.run(FutureTask.java:137)06-05 13:23:51.759: E/AndroidRuntime(8790): atandroid.os.AsyncTask$SerialExecitor$1.run(AsyncTask.java:230)06-05 13:23:51.759: E/AndroidRuntime(8790): atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)06-05 13:23:51.759: E/AndroidRuntime(8790): atjava.util.concurrent.ThreadPoolExecitor$Worker.run(ThreadPoolExecutor.java:569)06-05 13:23:51.759: E/AndroidRuntime(8790): atjava.lang.Thread.run(Thread.java:856)06-05 13:23:51.759: E/AndroidRuntime(8790):由以下原因引起:NullPointerException 06-05 13:23:51.759: E/AndroidRuntime(8790): atcom.example.phonebook.Mainactive$loginAccess. doInbackground(Mainactive. jWindowManagerInp. addView(WindowManagerInp. java: 292)06-05 13:23:52.309:E/WindowManager(8790):在android. view。WindowManagerInp. addView(WindowManagerInp. java: 224)06-05 13:23:52.309:E/WindowManager(8790):在android. view。WindowManagerImpl$CompatModeWrapper. addView(WindowManagerInp. java: 149)06-05 13:23:52.309:E/WindowManager(8790):在android. view。Window$LocalWindowManager. addView(Windows. java: 547)06-05 13:23:52.309:E/WindowManager(8790):在android. app. Dialog. show(Dialo. java: 277)06-05 13:23:52.309:E/WindowManager(8MainActivity2 dollars. onClick(MainActivity. java: 112)06-05 13:23:52.309:E/WindowManager(8790):在android. view。View. performClick(View. java: 4084)06-05 13:23:52.309:E/WindowManager(8790):在android. view。查看$PerformClick. run(View. java: 16987)06-05 13:23:52.309:E/WindowManager(8790):在android. os。Handler. handleCallback(Handler. java: 615)06-05 13:23:52.309:E/WindowManager(8790):在android. os。Handler。调度消息(Handler. java: 92)06-05 13:23:52.309:E/WindowManager(8790):在android. os。Looper. loop(Loper. java:方法。调用(方法。java: 511)06-05 13:23:52.309:E/WindowManager(8790):在com. android. interal. os。ZygoteInit$MESTodAndArgsCaller. run(ZygoteInit. java: 789)06-05 13:23:52.309:E/WindowManager(8790):在com. android. interal. os。ZygoteInit. main(ZygoteInit. java: 556)06-05 13:23:52.309:E/WindowManager(8790):在dalvik. system。NativeStart. main(本机方法)
去除
customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, contactList);
gridView.setAdapter(customGridAdapter);
从创建(Bundle savedInstanceState){。和
gridView = (GridView) findViewById(R.id.gridView);
从onPostExecute(...)
旁边初始化gridView=(GridView)findViewById(R.id.gridView);
之前
new GetContacts().execute();
返回您的原始代码,该代码使用空联系人列表设置网格适配器。这将消除空指针异常。在GridViewAdapter中添加一个名为callNotifyDataChanged的方法。java和下面的代码。
public void callNotifyDataChanged() {
notifyDataSetChanged();
}
在GetContacts中。onPostExecute方法,在再次设置适配器后调用此方法。
@Override
protected void onPostExecute(final ArrayList<HashMap<String, String>> result) {
super.onPostExecute(result);
....
....
customGridAdapter.callNotifyDataChanged() ;
理想情况下,您不必重新创建适配器并再次进行设置。您应该只更改适配器中的数据,并重用同一适配器。但首先,试试我的建议,看看是否有效。
祝你好运
我正在解析URL中的数据,下面提到了这个错误。 原始数据从服务器完美显示。无法使用Json解析拆分数据。 请帮我解决这个错误 编辑:1 来自URL的Json响应 错误: 主要活动。JAVA
问题内容: 这是我的设置: 我的文件在主文件夹内的文件夹中。 这是我的查询: 中的字眼是:美国 ,美国,美国 。 所以这行不通。有趣的是,搜索正常,但当我在文件中输入任何单词时 除外。因此,例如,当我通常在搜索中键入 我们 的内容时,就会得到结果。有了这个分析仪, 我们 什么都不会给我。 我已经完成并连接到ES服务器,但仍然无法正常工作。 编辑 一个示例: 的示例(这来自前端): 编辑#2 : 这
我在使用Android GridView时遇到了奇怪的问题。我创建了一个3x4的网格,并在其中插入了按钮。我希望当用户单击按钮时,按钮的背景发生变化。这对于除了第一个按钮(索引为0 -左上角的那个)之外的所有按钮都很好。无论我做什么,OnClick事件侦听器都不会为那个按钮触发。 这是我创建视图的代码: 如果我换掉 具有 然后onClick()被触发,但背景仍然没有改变。所有其他按钮都按预期工作。
问题内容: 我正在尝试使用数组中的json将多个变量从php文件发送回ajax。php文件中的代码可以完美运行,并且可以对数据库进行所有操作。但是,一旦我在ajax中添加dataType:“ json”,php文件中就什么也没有发生。我在Google上搜索了一下,有人说这可能是浏览器问题,但到目前为止,它在Firefox,Chrome或IE中均不起作用。我正在使用最新版本的jQuery。 这就是p
问题内容: 编辑:要补充一点,同义词似乎可以与基本的查询字符串查询一起使用。 这将返回新罕布什尔州的所有结果,但对“ nh”的“匹配”查询将不返回结果。 我正在尝试将同义词添加到我的Elastic索引中的位置字段中,这样,如果我对“质量”,“马”或“马萨诸塞州”进行位置搜索,则每次都会得到相同的结果。我将同义词过滤器添加到设置中,并更改了位置映射。这是我的设置: 以及location.region
本文向大家介绍.Net中的json操作类用法分析,包括了.Net中的json操作类用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例展示了.Net中的json操作类用法,对于进行.Net程序设计来说是非常重要的技巧。具体分析如下: 首先需要引用 System.Web.Extensions.dll 这个类库 命名空间需要加上:System.Web.Script.Serialization