首先,我想通知我創建一個android應用程序,允許用戶查看和註冊聯繫,通過使用sqlite存儲數據
而且,我使用AsyncTask來執行插入和查看數據。
現在,我想知道應該在哪裏編寫可點擊的視圖列表代碼。
它應該寫在backgroudTask中還是在displaycontact頁面中?
有人可以提供一些示例如何植入它?
以下是示例代碼和一些解釋。
這是backgoundTask。哪裏是合適的頁面放置點擊列表查看代碼
package com.example.assignment;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.widget.ListView;
import android.widget.Toast;
public class BackgroundTask extends AsyncTask <String ,Contact, String> {
Context ctx;
ContactAdapter contactAdapter;
Activity activity;
ListView listView;
BackgroundTask(Context ctx){
this.ctx = ctx;
activity = (Activity)ctx;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Contact... values) {
contactAdapter.add(values[0]);
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
String method = params[0];
DatabaseOperations databaseOperations = new DatabaseOperations(ctx);
if (method.equals("add_info")){
String cFamName = params[1];
String cFirName = params[2];
String cHouseNo = params[3];
String cStreet = params[4];
String cTown = params[5];
String cCountry = params[6];
String cPostcode = params[7];
String cTelNo = params[8];
SQLiteDatabase db = databaseOperations.getWritableDatabase();
databaseOperations.putInformation(db ,cFamName,cFirName,cHouseNo,cStreet,cTown,cCountry,cPostcode,cTelNo);
return "One Row Inserted...";
}
else if(method.equals("get_info")){
listView = (ListView)activity.findViewById(R.id.display_listview);
SQLiteDatabase db = databaseOperations.getReadableDatabase();
Cursor cursor = databaseOperations.getInformations(db);
contactAdapter = new ContactAdapter(ctx, R.layout.display_contact_row);
String cFamName, cFirName, cTelNo;
while(cursor.moveToNext()){
cFamName = cursor.getString(cursor.getColumnIndex(TableData.TableInfo.eeFamName));
cFirName = cursor.getString(cursor.getColumnIndex(TableData.TableInfo.eeFirName));
cTelNo = cursor.getString(cursor.getColumnIndex(TableData.TableInfo.eeTelNo));
Contact contact = new Contact(cFamName, cFirName, cTelNo);
publishProgress(contact);
}
return "get_info";
}
return null;
}
@Override
protected void onPostExecute(String result) {
if(result.equals("get_info")){
listView.setAdapter(contactAdapter);
}
else{
Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
}
}
}
這裏是顯示聯繫人的DisplayContact代碼,該聯繫人稱爲backgroudTask來顯示列表。
package com.example.assignment;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class DisplayContact extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display_contact);
BackgroundTask backgroundTask = new BackgroundTask(this);
backgroundTask.execute("get_info");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.display_contact, menu);
return true;
}
}
這裏是我的contactAdaper
package com.example.assignment;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class ContactAdapter extends ArrayAdapter<Object> {
List<Contact> list = new ArrayList<Contact>();
public ContactAdapter(Context context, int resource) {
super(context, resource);
// TODO Auto-generated constructor stub
}
public void add(Contact object){
list.add(object);
super.add(object);
}
@Override
public int getCount(){
return list.size();
}
@Override
public Object getItem(int position){
return list.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
ContactHolder contactHolder;
if(row==null){
LayoutInflater layoutInflater =(LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.display_contact_row,parent,false);
contactHolder = new ContactHolder();
contactHolder.name = (TextView)row.findViewById(R.id.name);
contactHolder.number = (TextView)row.findViewById(R.id.number);
row.setTag(contactHolder);
}
else{
contactHolder = (ContactHolder)row.getTag();
}
Contact contact = (Contact)getItem(position);
contactHolder.name.setText(contact.getName().toString());
contactHolder.number.setText(contact.getTelNo().toString());
return row;
}
static class ContactHolder{
TextView name, number;
}
}
Click是UI的一部分,因此它應該位於實現偵聽器的Activity/Fragment或附加到偵聽器中的獨立偵聽器中。我認爲你的問題是你正在嘗試創建UI onResponse。更好的方法是直接創建UI,只需填寫由asyncTask收到的數據即可。 – Fusselchen