Я работаю над приложением для Android, которое реализует навигационный ящик в качестве основного меню, а затем в зависимости от выбора, который я выполняю. Теперь одной из задач является заполнение списка из онлайн-узла базы данных mysql с использованием jdbc. Я могу заполнить список в обычной деятельности, но тот же код не работает в фрагменте. Это как мой фрагмент выглядит:Как заполнить список в фрагменте?
public class HomeFragment extends Fragment
{
private ProgressDialog pDialog;
ListView listView ;
Connection conn=null;
ResultSet rs=null;
PreparedStatement st=null;
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.main_list, container, false);
try
{
initList();
} catch (SQLException e)
{
e.printStackTrace();
}
String[] from = { "sender", "subject" ,"file_name"};
int[] to = {R.id.sender,R.id.subject,R.id.file_name};
SimpleAdapter adapter = new SimpleAdapter(getActivity(),list,R.layout.list_item,from,to);
//ListView lv=(ListView) rootView.findViewById(R.id.list);
//getListView();
ListView lv= (ListView) getActivity().findViewById(R.id.list);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String sender = ((TextView) view.findViewById(R.id.sender)).getText() .toString();
String subject = ((TextView) view.findViewById(R.id.subject)).getText() .toString();
String fname = ((TextView) view.findViewById(R.id.file_name)).getText() .toString();
}
});
return rootView;
}
public void initList() throws SQLException
{
String username="sql428447";
String pass="************";
String sender,subject,file_name;
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://sql4.freesqldatabase.com:3306/sql428447",username,pass);
}
catch(Exception x)
{
x.printStackTrace();
}
try
{
String sql="select sender,subject,file_name from files";
st=conn.prepareStatement(sql);
rs=st.executeQuery();
while(rs.next())
{
sender=rs.getString(1);
subject=rs.getString(2);
file_name=rs.getString(3);
list.add(createRecord(sender, subject,file_name));
}
}
catch(Exception z)
{
z.printStackTrace();
}
finally
{
st.close();
rs.close();
}
}
public HashMap<String, String> createRecord(String key, String name,String file_name)
{
HashMap<String, String> record = new HashMap<String, String>();
record.put("sender", key);
record.put("subject", name);
record.put("file_name",file_name);
return record;
}
}
и я называю этот фрагмент из навигации ящика выберите пункт так:
case 1:
newFragment = new HomeFragment();
transaction.replace(R.id.content_frame, newFragment);
transaction.addToBackStack(null);
transaction.commit();
break;
Но во время выполнения в журнале его метания исключение на линии initlist() и st.close(), которые я не могу понять. Я предполагаю, что мой подход почти правильный, что обсуждается в большинстве учебных пособий, но я не понимаю ошибки в моем коде, потому что он работает в обычной деятельности. Любая помощь будет оценена по достоинству. Благодаря Это скриншот исключения
Пожалуйста, дополнительные сведения о точном Exception вы получаете, в том числе типа Exception, сообщения исключения и точное местоположение в коде, где оно происходит. –
Я включил его снимок экрана –
использовать ListView lv = (ListView) rootView.findViewById (R.id.list); вместо getActivity для всего, что вы реализуете во Фрагменте – Rudi