从数据库中检索记录时,如何将图像分配给学生记录?
Posted
技术标签:
【中文标题】从数据库中检索记录时,如何将图像分配给学生记录?【英文标题】:How do you assign an image to a student record when the record is retrieved from the database? 【发布时间】:2019-03-02 01:07:17 【问题描述】:我正在制作一个应用程序,用于接收输入的学生详细信息。学生可以通过从数据库中检索他们的详细信息来查看他们的记录。到目前为止,我已经对所有这些进行了编码......但是现在我坚持为每个学生记录分配一个图像,因为它们在学生选择查看记录时出现。我在网上查过,但似乎找不到很多与数据库相关的信息...
以下是我在作业中遇到的问题:
"提供一个界面和相应的操作,用户可以在其中选择图像并分配 图像给学生。图像可以手动存储在应用程序本身中。显示学生信息时,应用应该能够显示分配的图像。”
我还附上了图片以明确我的问题:)
Student entering details
How the images are meant to appear
//activity_main
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".Viewstudent">
<android.support.design.widget.AppBarLayout
android:layout_
android:layout_
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_
android:layout_
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/screen4" />
<ListView
android:id="@+id/listView"
android:layout_marginTop="60dp"
android:layout_
android:layout_>
</ListView>
</android.support.design.widget.CoordinatorLayout>
//customlayoutsstudent.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:orientation="vertical"
>
<ImageView
android:id="@+id/imageview"
android:layout_
android:layout_ />
<TextView
android:id="@+id/sno"
android:layout_
android:layout_
android:layout_marginTop="15dp"
android:text="TextView"
/>
<TextView
android:id="@+id/sid"
android:layout_
android:layout_
android:text="TextView"
/>
<TextView
android:id="@+id/fn"
android:layout_
android:layout_
android:text="TextView"
/>
<TextView
android:id="@+id/ln"
android:layout_
android:layout_
android:text="TextView"
/>
<TextView
android:id="@+id/ge"
android:layout_
android:layout_
android:text="TextView"
/>
<TextView
android:id="@+id/cs"
android:layout_
android:layout_
android:text="TextView"
/>
<TextView
android:id="@+id/ag"
android:layout_
android:layout_
android:text="TextView"
/>
<TextView
android:id="@+id/ad"
android:layout_
android:layout_
android:text="TextView"
android:layout_marginBottom="20dp"
/>
//主要活动
package com.user.project3;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
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.SimpleAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class Viewstudent extends AppCompatActivity
DatabaseManager myDb;
ArrayList<String> sno = new ArrayList<String>();
ArrayList<String> sid = new ArrayList<String>();
ArrayList<String> fn = new ArrayList<String>();
ArrayList<String> ln = new ArrayList<String>();
ArrayList<String> ge = new ArrayList<String>();
ArrayList<String> cs = new ArrayList<String>();
ArrayList<String> ag = new ArrayList<String>();
ArrayList<String> ad = new ArrayList<String>();
Integer[] imgid R.drawable.ic_launcher_background
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(null);
myDb = new DatabaseManager(this);
ListView listView = (ListView)findViewById(R.id.listView);
CustomAdapter customAdapter = new CustomAdapter();
listView.setAdapter(customAdapter);
Cursor res = myDb.getAllDataStudent();
while(res.moveToNext())
sno.add(("Student Number: " + res.getString(0)));
sid.add(("Student Id: " + res.getString(1)));
fn.add("First Name: " + res.getString(2));
ln.add("Last Name: " + res.getString(3));
ge.add("Gender: " + res.getString(4));
cs.add("Course Study: " + res.getString(5));
ag.add("Age: " + res.getString(6));
ad.add("Address: " + res.getString(7));
class CustomAdapter extends BaseAdapter
@Override
public int getCount()
return sno.size();//return count of array
@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)
convertView =
getLayoutInflater().inflate(R.layout.customlayoutstudent,null);
TextView id = (TextView)convertView.findViewById(R.id.sno);
TextView studentid =
(TextView)convertView.findViewById(R.id.sid);
TextView fname = (TextView)convertView.findViewById(R.id.fn);
TextView lname = (TextView)convertView.findViewById(R.id.ln);
TextView gender = (TextView)convertView.findViewById(R.id.ge);
TextView coursestudy =
(TextView)convertView.findViewById(R.id.cs);
TextView age = (TextView)convertView.findViewById(R.id.ag);
TextView addr = (TextView)convertView.findViewById(R.id.ad);
id.setText(sno.get(position));
studentid.setText(sid.get(position));
fname.setText(fn.get(position));
lname.setText(ln.get(position));
gender.setText(ge.get(position));
coursestudy.setText(cs.get(position));
age.setText(ag.get(position));
addr.setText(ad.get(position));
return convertView;
@Override
public boolean onCreateOptionsMenu(Menu menu)
getMenuInflater().inflate(R.menu.screen4_menu, menu);
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
if (id == R.id.home8)
Intent intent = new Intent(Viewstudent.this, Home.class);
startActivity(intent);
return true;
if (id == R.id.prev3)
Intent intent = new Intent(Viewstudent.this, Addrecord.class);
startActivity(intent);
return true;
return super.onOptionsItemSelected(item);
【问题讨论】:
【参考方案1】:您可以做一件事,在注册学生或将他的记录添加到数据库时,只需为该学生的用户名/姓名分配一个 ImageID。 这样,每个学生将在数据库中分配 1 张图像。在获取该特定学生的信息时,您也获取了该图像 id,并使用 switch 循环仅显示与该 imageId 关联的 drawable 图像。
【讨论】:
啊啊啊这是个聪明的主意!!谢谢:) 很高兴能帮上忙!【参考方案2】:如果学生图像保存在设备中,您可以在用户输入学生数据时打开图库,然后如果您使用 sqlite,则将此图像保存为数据库中的 blob .. 将图像保存为 Blob 将让您将其检索为字节数组然后您可以将此图像作为位图显示到列表中的图像视图。 在这个链接中,您可以找到在 android 中处理 blob 的示例
how to store Image as blob in Sqlite & how to retrieve it?
【讨论】:
以上是关于从数据库中检索记录时,如何将图像分配给学生记录?的主要内容,如果未能解决你的问题,请参考以下文章
将表示 SQL 查询的记录数(计数)的值分配给 C# 中的变量