map集合明明是有数据源的,为什么还是报空指针异常?

silence角落 2015-06-30 05:27:34
package com.linhai.backup;

import android.content.Context;
import android.content.Intent;
import android.os.Environment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.SearchView;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.Inflater;

public class ExploreActivity extends ActionBarActivity {
private static Context context;
private static final String TGA ="ExploreActivity" ;
private static final String SDPATH= Environment.getExternalStorageDirectory().getAbsolutePath();
private String currentPath="/";
private static final String storageState="MEDIA_MOUNTED";
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_explore);
ActionBar bar=getSupportActionBar();
bar.setDisplayHomeAsUpEnabled(true);
bar.setDisplayShowTitleEnabled(false);
lv= (ListView) findViewById(R.id.lv);
lv.setAdapter(new myAdapter(this,getData()));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_explore, menu);
SearchView searchView= (SearchView) menu.findItem(R.id.action_search).getActionView();
if(searchView==null){
Log.e("SearchView","Fail to get Search View.");
return true;
}
searchView.setIconifiedByDefault(true);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
switch (id){
case R.id.action_settings:
return true;
case android.R.id.home:
Intent intent=new Intent(ExploreActivity.this,MainActivity.class);
startActivity(intent);
this.finish();
Log.i(TGA, ":back to main");
return true;
case R.id.action_search:
Toast.makeText(this,"isExpanded?",Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private class ViewHolder{
ImageView img;
TextView tv;
}
private List<Map<String,Object>> getData() {
List<Map<String,Object>> list =new ArrayList<Map<String,Object>>();
Map<String,Object> map=new HashMap<String,Object>();
File file=new File(currentPath);
File[] files=file.listFiles();
if(currentPath=="/"){
map.put("icon", R.drawable.files);
map.put("filename", "内部存储");
list.add(map);
if (Environment.getExternalStorageState().equals(storageState)){
map.put("icon", R.drawable.files);
map.put("filename", "SD卡");
list.add(map);
Log.i(TGA, "map:"+map);
}
else{
Toast.makeText(this,"sd未挂载",Toast.LENGTH_SHORT).show();
}
Log.i(TGA, "map:"+map);

}else{
map.put("icon",R.drawable.back);
map.put("filename", "返回上一级");
list.add(map);
if (files !=null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
map.put("icon", R.drawable.files);
map.put("filename", files[i].getName());
list.add(map);
} else {
map.put("icon", R.drawable.file);
map.put("filename", files[i].getName());
list.add(map);
}
}
}
}
return list;
}
private class myAdapter extends BaseAdapter{

List<Map<String,Object>> mData;
LayoutInflater mInflater;
public myAdapter(Context context,List<Map<String, Object>> mData){
this.mInflater= LayoutInflater.from(context);
this.mData=mData;
}
@Override
public int getCount() {
return mData.size();
}

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
Map<String,Object> map=mData.get(position);
Log.i(TGA, "map:"+map);
ViewHolder holder=null;
if(convertView==null){
holder=new ViewHolder();
convertView=mInflater.inflate(R.layout.listview_content,null);
holder.img=(ImageView) findViewById(R.id.img);
holder.tv=(TextView) findViewById(R.id.title);
convertView.setTag(holder);
}
else{
holder= (ViewHolder) convertView.getTag();
}
Log.i(TGA, "icon:" + map.get("icon"));
holder.img.setBackgroundResource((Integer) map.get("icon"));//就是这里出问题啦
holder.tv.setText((CharSequence) map.get("filename"));//就是这里出问题啦

return convertView;
}
}
}
...全文
556 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
silence角落 2015-06-30
  • 打赏
  • 举报
回复
确实img和tv都是null,已找到方法:View.findViewbyId,谢谢hjq2013!
Hare_ 2015-06-30
  • 打赏
  • 举报
回复
可能是id没有找到把

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧