2016-10-20 18 views
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); 
} 
} 
+0

私はあなたのインターネット接続がゆっくりとしていると思います。 – Nowshad

+0

https://developer.android.com/training/material/lists-cards.htmlをご利用ください。また、サーバーからの応答を取得する時間を確認します。 – DKV

+0

インターネットの速度が良好で、サーバー自体が応答が遅い場合は、非同期タスクを使用してProgressDialogを追加し、それをonPreExecute()に表示してください。あなたのリストが入力されている間、ポップアップが表示されます。 – Arthas

答えて

0

私は同じ問題を抱えています。私はアンドロイドが私たちに与える可能性を利用しました。

チャットでメッセージを読み込みたくない場合があります。

私はすべてのIDのリストを与えるカスタムアダプターを持っています。アダプターgetViewは、リストビューをスクロールすると呼び出され、すぐにその項目が表示されます。したがって、この部分ではメッセージの実際の読み込みを行います。

サーバがそのような事を提供する場合、私は知らない、またはあなたが

JSONObject jsonpart= arr.getJSONObject(i); 
web.add(jsonpart.getString("short_description")); 
tktnumber.add(jsonpart.getString("number")); 
status.add(jsonpart.getString("incident_state")); 

をつかむと、アダプタのgetView方法にそれを置くことができれば。

関連する問題