Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将变量从onClicListener传递到dbHandler_Android_Database_Sqlite - Fatal编程技术网

Android 如何将变量从onClicListener传递到dbHandler

Android 如何将变量从onClicListener传递到dbHandler,android,database,sqlite,Android,Database,Sqlite,我有一张名单,上面有我的听众。清单上有日期和地点。 我希望将位置(单击时)传递给数据库处理程序,然后在新活动中获取相同位置的所有数据 我不太擅长安卓操作系统,所以我在问有没有可能做到这一点?以及如何将这个带有地名的变量传递到dbHandler中 这是我的听众 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout

我有一张名单,上面有我的听众。清单上有日期和地点。 我希望将位置(单击时)传递给数据库处理程序,然后在新活动中获取相同位置的所有数据

我不太擅长安卓操作系统,所以我在问有没有可能做到这一点?以及如何将这个带有地名的变量传递到dbHandler中

这是我的听众

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_listview);

    mainListView = (ListView) findViewById(R.id.ListViewItem);

    dbHandler = new LogsDBHandler(this);
    ArrayList<Logs> logsList = dbHandler.getAllLogsGroupedByPlace();
    listAdapter = new LogsByPlaceAdapter(logsList);
    mainListView.setAdapter(listAdapter);

    mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(DisplayLogsByPlace.this, LogsList.class);
            startActivity(intent);
        }
    });
}

private class LogsByPlaceAdapter extends BaseAdapter {
    private LayoutInflater inflater;
    private List<Logs> logsList;

    public LogsByPlaceAdapter(List<Logs> logsList) {
        inflater = LayoutInflater.from(DisplayLogsByPlace.this);
        this.logsList = logsList;
    }

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

    @Override
    public Object getItem(int position) {
        return logsList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return logsList.get(position).getId();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.activity_display_logs_by_place, parent, false);
        }

        Logs log = logsList.get(position);
        ((TextView) convertView.findViewById(R.id.textShowDate)).setText(log.getCreatedAt().toString());
        ((TextView) convertView.findViewById(R.id.textShowPlace)).setText(log.getPlace());
        return convertView;
    }
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_listview);
mainListView=(ListView)findViewById(R.id.ListViewItem);
dbHandler=新的LogsDBHandler(此);
ArrayList logsList=dbHandler.getAllLogsGroupedByPlace();
listAdapter=新的LogsByReplaceAdapter(logsList);
mainListView.setAdapter(listAdapter);
mainListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
意向意向=新意向(DisplayLogsByPlace.this、LogsList.class);
星触觉(意向);
}
});
}
私有类LogsByReplaceAdapter扩展BaseAdapter{
私人充气机;
私有列表日志列表;
公共日志ByReplaceAdapter(列表日志列表){
充气器=从(DisplayLogsByPlace.this)开始的布局充气器;
this.logsList=logsList;
}
@凌驾
public int getCount(){
返回logsList.size();
}
@凌驾
公共对象getItem(int位置){
返回日志列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回logsList.get(position.getId();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=充气机。充气(R.layout.activity\u按地点显示日志,父项,false);
}
Logs log=logsList.get(位置);
((TextView)convertView.findViewById(R.id.textShowDate)).setText(log.getCreatedAt().toString());
((TextView)convertView.findviewbyd(R.id.textShowPlace)).setText(log.getPlace());
返回视图;
}
}
这是我的dbHandler,我在其中调用这个变量

public ArrayList<Logs> getAllLogsWithSamePlace(String place) {
        ArrayList<Logs> logPlaceList = new ArrayList<Logs>();
        String selectQuery = "SELECT * FROM " + TABLE_LOGS + " WHERE " + KEY_PLACE + "=" + place;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
           ...
        }
        return  logPlaceList;
    }
public ArrayList getAllLogsWithSamePlace(字符串位置){
ArrayList logPlaceList=新建ArrayList();
String selectQuery=“SELECT*FROM”+表\日志+”其中“+键\位置+”=“+位置;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
...
}
返回日志放置列表;
}
mainListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//如果你的方法是静态的
ArrayList数组=dbHandler.getAllLogsWithSamePlace(位置);
//如果不是,则应该初始化dbhandler
意向意向=新意向(DisplayLogsByPlace.this、LogsList.class);
putArrayListExtra(“sameplaceray”,数组);
星触觉(意向);
}
});
公共阵列列表getAllLogsWithSamePlace(字符串位置){
ArrayList logPlaceList=新建ArrayList();
String selectQuery=“SELECT*FROM”+表\日志+”其中“+键\位置+”=“+位置;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
...
}
返回日志放置列表;
}
}

然后在调用dbHandler函数获取数据后

onItemClickListener通过intent传递位置值,在SecondActivity中首先从intent获取值,然后调用dbHandler方法获取getAllLogsWithSamePlace数据适配器的外观是什么??AdapterView是什么样子的??它有任何对象而不是泛型吗?我刚刚用适配器更新了活动。这很好,但不是我需要的。这个矿址是DB列。在列表视图中,我按位置将其分组。因此,当在活动中单击此位置时,我需要以某种方式将其传递到dbHandler中的SqlQuery(
String selectQuery=“SELECT*FROM”+TABLE\u LOGS+“WHERE”+KEY\u place+“=”+place;
),这并不是我所需要的。这个矿址是DB列。在列表视图中,我按位置将其分组。因此,当在活动中单击此位置时,我需要以某种方式将其传递给dbHandler中的SqlQuery
String selectQuery=“SELECT*FROM”+TABLE\u LOGS+“WHERE”+KEY\u place+“=”+placemainListView.setOnItemClickListener(新建AdapterView.OnItemClickListener(){@Override public void onItemClick(AdapterView父级,视图视图,int位置,长id){ArrayList placeValue=dbHandler.getAllLogsWithSamePlace(位置);Intent Intent=new Intent(displayslogsbyplace.this,LogsList.class);intent.putExtra(“keyPlace”,placeValue);startActivity(intent);}});
不知道为什么,但错误是(place)?因为您必须首先定义特定的位置,比如“Iran”,然后将其传递给methodHm。。但是,如果您知道我的意思的话,我需要在单击istite时获得该位置?
mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,        long id) {

    // if your method is static
    ArrayList<String> array = dbHandler.getAllLogsWithSamePlace(place);
    // if not you shoud initialize the dbhandler

    Intent intent = new Intent(DisplayLogsByPlace.this, LogsList.class);

    intent.putArrayListExtra("sameplaceArray", array);

    startActivity(intent);
    }
});


    public ArrayList<Logs> getAllLogsWithSamePlace(String place) {
    ArrayList<Logs> logPlaceList = new ArrayList<Logs>();
    String selectQuery = "SELECT * FROM " + TABLE_LOGS + " WHERE " +    KEY_PLACE + "=" + place;


    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
       ...
    }
    return  logPlaceList;
}
}
mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
   Intent intent = new Intent(DisplayLogsByPlace.this, LogsList.class);
   intent.putExtra("keyword","PlaceValue");
   startActivity(intent);
   }
});
String place=getIntent().getExtra().getString("keyword");