Java 如何从简单列表视图的按钮打开新活动

Java 如何从简单列表视图的按钮打开新活动,java,android,json,xml,listview,Java,Android,Json,Xml,Listview,Devs我陷入了一个严重的问题,我有一个简单的列表视图,它有一个图像视图和几个文本视图来显示一些文本和两个按钮。现在的问题是,当我在按钮上设置click listener时,出现了空指针错误。我在谷歌上搜索了这个问题,并找到了一个解决方案来制作一个自定义适配器来解决这个问题,但我不想使用自定义适配器。如果我的代码下面没有自定义适配器类,有没有办法解决这个问题: 公共类JsonParsing扩展了AppCompative活动{ 按钮det; 按钮式变速器; 私有字符串标记=MainActivit

Devs我陷入了一个严重的问题,我有一个简单的列表视图,它有一个图像视图和几个文本视图来显示一些文本和两个按钮。现在的问题是,当我在按钮上设置click listener时,出现了空指针错误。我在谷歌上搜索了这个问题,并找到了一个解决方案来制作一个自定义适配器来解决这个问题,但我不想使用自定义适配器。如果我的代码下面没有自定义适配器类,有没有办法解决这个问题:

公共类JsonParsing扩展了AppCompative活动{
按钮det;
按钮式变速器;
私有字符串标记=MainActivity.class.getSimpleName();
私有ListView lv;
ArrayList联系人列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u json\u解析);
det=(按钮)findViewById(R.id.det);
trans=(按钮)findViewById(R.id.trans);
//trans.setOnClickListener(新视图.OnClickListener(){
//@覆盖
//公共void onClick(视图v){
//Intent Intent=新的Intent(JsonParsing.this,MainActivity.class);
//星触觉(意向);
//            }
//        });
contactList=新的ArrayList();
lv=(ListView)findViewById(R.id.list);
新建GetContacts().execute();
}
私有类GetContacts扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
Toast.makeText(JsonParsing.this,“Json数据正在下载”,Toast.LENGTH_LONG.show();
}
@凌驾
受保护的Void doInBackground(Void…arg0){
HttpHandler sh=新的HttpHandler();
//向url发出请求并获得响应
字符串url=”https://api.androidhive.info/contacts/";
字符串jsonStr=sh.makeServiceCall(url);
Log.e(标签,“来自url的响应:+jsonStr”);
if(jsonStr!=null){
试一试{
JSONObject jsonObj=新的JSONObject(jsonStr);
//获取JSON数组节点
JSONArray contacts=jsonObj.getJSONArray(“contacts”);
//通过所有触点循环
对于(int i=0;ivalue
联系人:put(“id”,id);
联系人。填写(“姓名”,姓名);
联系方式。放置(“电子邮件”,电子邮件);
联系人:put(“mobile”,mobile);
联系方式。填写(“地址”,地址);
联系人:put(“性别”,性别);
//将联系人添加到联系人列表
联系人列表。添加(联系人);
}
}捕获(最终JSONException e){
Log.e(标记“Json解析错误:”+e.getMessage());
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
Toast.makeText(getApplicationContext(),
Json分析错误:“+e.getMessage(),
Toast.LENGTH_LONG).show();
}
});
}
}否则{
e(标记“无法从服务器获取json”);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
Toast.makeText(getApplicationContext(),
“无法从服务器获取json。请检查LogCat以了解可能的错误!”,
Toast.LENGTH_LONG).show();
}
});
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
ListAdapter=new SimpleAdapter(JsonParsing.this,contactList,
R.layout.list_项,新字符串[]{“id”,“name”,“email”,“mobile”,“address”,“gender”},
新int[]{R.id.id,R.id.name,R.id.email,R.id.mobile,R.id.address,R.id.gender});
低压设置适配器(适配器);
}
}
}
此行:

startActivity(intent)
需要上下文,这就是您出现此错误的原因:

Unable to start activity ComponentInfo
正确的方法是:

context.startActivity(intent)

您需要一个自定义的适配器。大多数示例/教程都说明了如何制作一个完整的适配器,但您只需使用当前适配器代码覆盖getView()。因此,改变:

    ListAdapter adapter = new SimpleAdapter(JsonParsing.this, contactList,
            R.layout.list_item, new String[]{"id", "name","email","mobile","address","gender"},
            new int[]{R.id.id,R.id.name,R.id.email, R.id.mobile,R.id.address,R.id.gender});

ListAdapter=new simpledapter(JsonParsing.this,contactList,
R.layout.list_项,新字符串[]{“id”,“name”,“email”,“mobile”,“address”,“gender”},
新int[]{R.id.id,R.id.name,R.id.email,R.id.mobile,R.id.address,R.id.gender}){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=super.getView(位置、转换视图、父级);
//执行自定义操作的代码
    ListAdapter adapter = new SimpleAdapter(JsonParsing.this, contactList,
            R.layout.list_item, new String[]{"id", "name","email","mobile","address","gender"},
            new int[]{R.id.id,R.id.name,R.id.email, R.id.mobile,R.id.address,R.id.gender}){

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = super.getView(position, convertView, parent);

            // Codes that do custom things.
            Button trans = view.findViewById(R.id.trans);
            trans.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(JsonParsing.this, MainActivity.class);
                    HashMap<String, String> contact = (HashMap<String, String>) getItem(position);
                    intent.putExtra("id", contact.get("id"));
                    intent.putExtra("name", contact.get("name"));
                    intent.putExtra("email", contact.get("email"));
                    intent.putExtra("mobile", contact.get("mobile"));
                    intent.putExtra("address", contact.get("address"));
                    intent.putExtra("gender", contact.get("gender"));
                    startActivity(intent);
                }
            });

            return view;
        }
    };