0
apiからjsonデータを取得していますが、私のカスタムリストビューにアイテム番号と短い説明という2つのフィールドを表示したいとします。すべてが正常に動作しており、データc =も出てきますが、コードがリストビューにデータを入力するのに時間がかかります。誰かが何かを提案することができますか、それとも私は間違っているのですか?以下は私のコードです: -カスタムリストビューの読み込みに時間がかかりすぎる
public class AllTickets_del extends ActionBarActivity {
private android.support.v7.widget.Toolbar toolbar;
android.widget.ListView list;
ArrayList<String> web=new ArrayList<>();
ArrayList<String> tktnumber=new ArrayList<>();
ArrayList<String> status=new ArrayList<>();
String myurl="";
public class DownloadTask extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... params) {
String result="";
URL url;
HttpURLConnection urlConnection;
try{
url= new URL(params[0]);
URI uri = new URI(url.getProtocol(), url.getUserInfo(),
url.getHost(), url.getPort(), url.getPath(),
url.getQuery(), url.getRef());
url = uri.toURL();
urlConnection=(HttpURLConnection)url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while(data!=-1){
char current = (char)data;
result+=current;
data=reader.read();
}
try {
JSONObject jsonobject = new JSONObject(result);
String info= jsonobject.getString("result");
JSONArray arr = new JSONArray(info);
for (int i=0;i<arr.length();i++){
JSONObject jsonpart= arr.getJSONObject(i);
web.add(jsonpart.getString("short_description"));
tktnumber.add(jsonpart.getString("number"));
status.add(jsonpart.getString("incident_state"));
}
} catch (JSONException e) {
e.printStackTrace();
Log.i("json", "catch");
}
final Intent tktdetails= new Intent(getApplicationContext(), Ticketdetails.class);
CustomList_del adapter = new
CustomList_del(AllTickets_del.this, web,tktnumber);
list=(ListView)findViewById(R.id.list);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String ticketnumber= tktnumber.get(+position);
String ticketcontent= web.get(+position);
tktdetails.putExtra("ticketnumber", ticketnumber);
tktdetails.putExtra("ticketcontent", ticketcontent);
startActivity(tktdetails);
}
});
}catch(Exception e){
e.printStackTrace();
Log.i("bigger","catch");
}
return result;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_all_tickets_del);
toolbar=(android.support.v7.widget.Toolbar)findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
myurl="URL from where im getting data";
String result="";
DownloadTask task= new DownloadTask();
try {
task.execute(myurl).get();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_all_tickets_del, 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.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
私はあなたのインターネット接続がゆっくりとしていると思います。 – Nowshad
https://developer.android.com/training/material/lists-cards.htmlをご利用ください。また、サーバーからの応答を取得する時間を確認します。 – DKV
インターネットの速度が良好で、サーバー自体が応答が遅い場合は、非同期タスクを使用してProgressDialogを追加し、それをonPreExecute()に表示してください。あなたのリストが入力されている間、ポップアップが表示されます。 – Arthas