2016-11-09 8 views
1

こんにちは、私はこの問題に何度も直面していますが、グーグルで正しい解決策を見つけられません。何が私のサーバーと同期するチャットアプリケーションを作成したい私は8秒ごとにサーバーからデータを取得し、リストビューで更新されたものを表示し、前のものをクリアする手法を実装しました。私が直面した問題は、私がリストビューをスクロールするとアプリケーションがクラッシュし、logcatに投稿したエラーが表示されるということです。リストビューをサーバー経由で更新し、更新したものを連結なしで表示する

Logcat:

java.lang.IndexOutOfBoundsException: Invalid index 13, size is 0 

MainActivity.java

import java.util.ArrayList; 
import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.graphics.Color; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Looper; 
import android.os.Message; 
import android.support.annotation.RequiresApi; 
import android.text.Html; 
import android.text.SpannableString; 
import android.text.SpannableStringBuilder; 
import android.text.style.ForegroundColorSpan; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonArrayRequest; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Timer; 
import java.util.TimerTask; 


public class MainActivity extends ListActivity 
{ 
Handler h;int delay; 
private static final String REGISTER_URL = "http://friends.ueuo.com/chat.php"; 
public static final String RECEVIE_URL = "http://friends.ueuo.com/rec.php"; 
String message,Sender_name; 
public static final String KEY_SEND = "send"; 
public static final String KEY_RECEIVE = "receive"; 
public static final String KEY_MESSAGE = "Message"; 

ArrayList<String> list = new ArrayList<String>(); 
ArrayList<String> list1 = new ArrayList<String>(); 
ArrayAdapter<String> adapter,adapter1; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Receive(); 

    h = new Handler(); 
    delay = 15000; //milliseconds 

    h.postDelayed(new Runnable() 
    { 
     public void run() 
     { 
      list.clear(); 
      Receive(); 
      h.postDelayed(this, delay); 

     } 
    }, delay); 






    Button btn = (Button) findViewById(R.id.addItem); 
    adapter = new ArrayAdapter<String>(this,R.layout.my_custom_layout, list); 

    OnClickListener listener = new OnClickListener() 
    { 
     @RequiresApi(api = Build.VERSION_CODES.KITKAT) 
     @Override 
     public void onClick(View v) { 
      EditText edit = (EditText) findViewById(R.id.text); 
      message = edit.getText().toString(); 
      String sender = "Sender"+System.lineSeparator()+""; 
      list.add(sender+edit.getText().toString()); 
      setListAdapter(adapter); 
      adapter.notifyDataSetChanged(); 
      registerUser(); 
     } 
    }; 


    btn.setOnClickListener(listener); 


} 





private void registerUser() 
{ 


    StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        Toast.makeText(MainActivity.this, response, Toast.LENGTH_LONG).show(); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show(); 
       } 
      }) { 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put(KEY_SEND, "[email protected]"); 
      params.put(KEY_RECEIVE, "[email protected]"); 
      params.put(KEY_MESSAGE, message); 
      return params; 
     } 

    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
} 




private void Receive() 
{ 


    StringRequest stringRequest = new StringRequest(RECEVIE_URL, new Response.Listener<String>() 
    { 
     @RequiresApi(api = Build.VERSION_CODES.KITKAT) 
     @Override 
     public void onResponse(String response) 
     { 

      showJSON(response); 
     } 
    }, 
      new Response.ErrorListener() 
      { 
       @Override 
       public void onErrorResponse(VolleyError error) 
       { 
        Toast.makeText(MainActivity.this,error.getMessage().toString(),Toast.LENGTH_LONG).show(); 
       } 
      }); 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
} 

@RequiresApi(api = Build.VERSION_CODES.KITKAT) 
private void showJSON(String response) 
{ 
    JSONObject jsonObject=null; 
    JSONArray users = null; 
    try 
    { 
     jsonObject = new JSONObject(response); 
     users = jsonObject.getJSONArray("result"); 

     // JSONObject jsonObject = new JSONObject(response); 
     //JSONArray result = jsonObject.getJSONArray("result"); 
     // JSONObject collegeData = result.getJSONObject(2); 
     // name = collegeData.getString("message"); 
     for(int i=0;i<users.length();i++) 
     { 

      JSONObject jo = users.getJSONObject(i); 
      message=jo.getString("message"); 
      Sender_name=jo.getString("sendby"); 
      if (Sender_name.equals("[email protected]")) 

      { 


       String sender="Wajid Usman"+System.lineSeparator()+""; 
       list.add(sender+message); 
       setListAdapter(adapter); 
       adapter.notifyDataSetChanged(); 



      } 
      else 

      { 

       String receiver="Salman"+System.lineSeparator()+System.lineSeparator(); 
       list.add(receiver+message); 
       setListAdapter(adapter); 
       adapter.notifyDataSetChanged(); 
      } 



     } 


    } 
    catch (JSONException e) 
    { 
     e.printStackTrace(); 
    } 

} 

} 
+0

このコードはエラーとは関係がないと思います。しかし、答えでは空のリストから要素を取得しようとしているように –

答えて

0

は、それはあなたが0,1,2、ECC位置のように各要素を取得することができます0の要素を持つArrayListのがあることを意味します。そして、ArrayListに存在しない12番目の要素を読み込もうとしています。

+0

logcat:index 13のようにリストが空であるため、 'size is 0' –

関連する問題