編集済み 誰かが同じ問題を抱えている場合、私はコードを編集して現在作業中 です。これまで私を助けてくれたすべての人に感謝します。私はAndroidとJavaの開発に不慣れで、アダプターとカスタム行で非常に苦労しています。
さて、私は提供された例に従ってコードを変更しました、今は次のとおりです
public class EveryonesDiaries extends ListActivity {
private ProgressDialog m_ProgressDialog = null;
private ArrayList<Every> m_every = null;
private EveryAdapter m_adapter = null;
private Runnable viewEvery;
private String strcline;
SharedPreferences pref;
String userid = "";
String pageNum = "";
String maxNum = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.everyonesdiaries);
m_every = new ArrayList<Every>();
this.m_adapter = new EveryAdapter(this, R.layout.cellevery, m_every);
setListAdapter(this.m_adapter);
pref = getSharedPreferences("pref", MODE_PRIVATE);
String userid = pref.getString("userid","");
pageNum = "0";
maxNum = "3";
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
StringBuilder data = new StringBuilder();
data.append("--0xKhTmLbOuNdArY\r\n");
data.append("Content-Disposition: form-data; name=\"userid\"\r\n\r\n");
data.append(userid);
data.append("\r\n--0xKhTmLbOuNdArY\r\n");
data.append("Content-Disposition: form-data; name=\"pagenum\"\r\n\r\n");
data.append(pageNum);
data.append("\r\n--0xKhTmLbOuNdArY\r\n");
data.append("Content-Disposition: form-data; name=\"maxnum\"\r\n\r\n");
data.append(maxNum);
data.append("\r\n--0xKhTmLbOuNdArY\r\n");
String sendData = data.toString();
try{
String usedServer = Common.diaryHistory();
strcline = Common.connect(sendData, usedServer);
Log.d("string", strcline);
}catch(Exception e){
e.printStackTrace();
alertDialog.setTitle(R.string.title_error);
alertDialog.setMessage(R.string.connection_error);
alertDialog.setPositiveButton(R.string.ok_button, null);
alertDialog.show();
}
viewEvery = new Runnable(){
@Override
public void run() {
getEvery();
}
};
Thread thread = new Thread(null, viewEvery, "MagentoBackground");
thread.start();
m_ProgressDialog = ProgressDialog.show(EveryonesDiaries.this,
"Please wait...", "Retrieving data ...", true);
}
private Runnable returnRes = new Runnable() {
@Override
public void run() {
Log.d("a3", ""+ m_every.size());
if(m_every != null && m_every.size() > 0){
m_adapter.notifyDataSetChanged();
for(int i=0;i<m_every.size();i++)
m_adapter.add(m_every.get(i));
}
m_ProgressDialog.dismiss();
m_adapter.notifyDataSetChanged();
}
};
private void getEvery(){
try{
//start to work the JSON array
JSONArray a1 = new JSONArray(strcline);
//Start decoding the first cycle of the JSON array
for(int i=0; i < a1.length(); i++){
JSONArray a2 = a1.getJSONArray(i);
Log.d("a1", String.valueOf(a2));
String userName = a2.getString(1);
String diaryDate = a2.getString(4);
Log.d("a2", userName);
Log.d("a2", diaryDate);
Every e1 = new Every();
e1.setUserName(userName);
e1.setDiaryDate(diaryDate);
m_every.add(e1);
Thread.sleep(5000);
Log.i("a2", ""+ m_every.size());
}
}catch(Exception e){
Log.e("BACKGROUND_PROC", e.getMessage());
}
runOnUiThread(returnRes);
}
次のようなアダプタを使用します。
private class EveryAdapter extends ArrayAdapter<Every> {
private ArrayList<Every> items;
public EveryAdapter(Context context, int textViewResourceId, ArrayList<Every> items) {
super(context, textViewResourceId, items);
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.cellevery, null);
}
Every e = items.get(position);
Log.e("a2", String.valueOf(items));
if(e != null){
TextView cName = (TextView) v.findViewById(R.id.cellName);
TextView cDate = (TextView) v.findViewById(R.id.cellDate);
if(cName != null){
cName.setText(e.getUserName());
if(cDate != null){
cDate.setText(e.getDiaryDate());
}
}
}
return v;
}
}
編集 すると、コードの一部が欠落していました* m_every = new ArrayList(); *フィールドへの入力を開始しますが、最初のフィールドで停止し、実行可能データがなくなるまで「データの取得...」と表示し続けます。メモリのそれがクラッシュします。
私の問題はコードのこの部分にあると思いますが、それを理解することはできません。誰かが私を理解するのを手伝ってくれるならお願いします。
private void getEvery(){
try{
//start to work the JSON array
JSONArray a1 = new JSONArray(strcline);
// this part was missing
m_every = new ArrayList<Every>();
//Start decoding the first cycle of the JSON array
for(int i=0; i < a1.length(); i++){
JSONArray a2 = a1.getJSONArray(i);
Log.d("a1", String.valueOf(a2));
String userName = a2.getString(1);
String diaryDate = a2.getString(4);
Log.d("a2", userName);
Log.d("a2", diaryDate);
Every e1 = new Every();
e1.setUserName(userName);
e1.setDiaryDate(diaryDate);
m_every.add(e1);
Thread.sleep(5000);
Log.i("a2", ""+ m_every.size());
}
}catch(Exception e){
Log.e("BACKGROUND_PROC", e.getMessage());
}
runOnUiThread(returnRes);
}