Estou com o erro abaixo. Já fiz 2 checagem do código e não parece haver nada de errado em relação ao curso. Vi uma possível solução no forum para utilizar optInt(variavel)
mas não obtive sucesso.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.androidera.silvanioduartedacruz.aplicativochat, PID: 5007
java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:404)
at java.util.AbstractList.add(AbstractList.java:425)
at com.androidera.silvanioduartedacruz.aplicativochat.activity.MainActivity.colocaNaList(MainActivity.java:57)
at com.androidera.silvanioduartedacruz.aplicativochat.service.ChatService$2$1.run(ChatService.java:107)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
ChatService
package com.androidera.silvanioduartedacruz.aplicativochat.service;
import com.androidera.silvanioduartedacruz.aplicativochat.activity.MainActivity;
import com.androidera.silvanioduartedacruz.aplicativochat.modelo.Mensagem;
import org.json.JSONObject;
import org.json.JSONStringer;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;
/**
* Created by silvanioduartedacruz on 04/03/17.
*/
public class ChatService {
private MainActivity activity;
public ChatService(MainActivity activity){
this.activity = activity;
}
public void enviarMensagens(final Mensagem mensagem) {
new Thread(new Runnable() {
@Override
public void run() {
String texto = mensagem.getTexto();
try {
URL url = new URL("http://192.168.1.5:8080/polling");
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
httpConnection.setRequestMethod("POST");
httpConnection.setRequestProperty("content-type", "application/json");
JSONStringer json = new JSONStringer()
.object()
.key("text")
.value(texto)
.key("id")
.value(mensagem.getId())
.endObject();
OutputStream saida = httpConnection.getOutputStream();
PrintStream ps = new PrintStream(saida);
ps.println(json.toString());
httpConnection.connect();
httpConnection.getInputStream();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}).start();
}
public void ouvirMensagem() {
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("http://192.168.1.5:8080/polling");
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
httpConnection.setRequestMethod("GET");
httpConnection.setRequestProperty("Accept", "application/json");
httpConnection.connect();
Scanner scanner = new Scanner(httpConnection.getInputStream());
StringBuilder builder = new StringBuilder();
while (scanner.hasNextLine()) {
builder.append(scanner.nextLine());
}
String json = builder.toString();
JSONObject jsonObject = new JSONObject(json);
final Mensagem mensagem = new Mensagem(jsonObject.optInt("id"), jsonObject.optString("text"));
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
activity.colocaNaList(mensagem);
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}).start();
}
}
MainActivity
package com.androidera.silvanioduartedacruz.aplicativochat.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import com.androidera.silvanioduartedacruz.aplicativochat.R;
import com.androidera.silvanioduartedacruz.aplicativochat.adapter.MensagemAdapter;
import com.androidera.silvanioduartedacruz.aplicativochat.modelo.Mensagem;
import com.androidera.silvanioduartedacruz.aplicativochat.service.ChatService;
import java.util.Arrays;
import java.util.List;
import static android.R.attr.button;
public class MainActivity extends AppCompatActivity {
private int idDoCliente = 1;
private Button button;
private EditText editText;
private ListView listaDeMensagens;
private List<Mensagem> mensagens;
private ChatService chatService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listaDeMensagens = (ListView) findViewById(R.id.lv_mensagens);
mensagens = Arrays.asList(new Mensagem(1,"Olá alunos de Android"), new Mensagem(2,"Oi"));
MensagemAdapter adapter = new MensagemAdapter(idDoCliente, mensagens, this);
listaDeMensagens.setAdapter(adapter);
button = (Button) findViewById(R.id.btn_enviar);
editText = (EditText) findViewById(R.id.et_text);
chatService = new ChatService(this);
chatService.ouvirMensagem();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
chatService.enviarMensagens(new Mensagem(idDoCliente, editText.getText().toString()));
}
});
}
public void colocaNaList(Mensagem mensagem){
mensagens.add(mensagem);
MensagemAdapter adapter = new MensagemAdapter(idDoCliente, mensagens, this);
listaDeMensagens.setAdapter(adapter);
chatService.ouvirMensagem();
}
}
MensagemAdapter
package com.androidera.silvanioduartedacruz.aplicativochat.adapter;
import android.app.Activity;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.androidera.silvanioduartedacruz.aplicativochat.R;
import com.androidera.silvanioduartedacruz.aplicativochat.modelo.Mensagem;
import java.util.List;
/**
* Created by silvanioduartedacruz on 03/03/17.
*/
public class MensagemAdapter extends BaseAdapter {
private Activity activity;
private List<Mensagem> mensagens;
private int idDoCliente;
//Construtor
public MensagemAdapter(int idDoCliente, List<Mensagem> mensagens, Activity activity){
this.mensagens = mensagens;
this.activity = activity;
this.idDoCliente = idDoCliente;
}
@Override
public int getCount() {
return mensagens.size();
}
@Override
public Object getItem(int i) {
return mensagens.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
View linha = activity.getLayoutInflater().inflate(R.layout.mensagem,viewGroup, false);
TextView texto = (TextView) linha.findViewById(R.id.tv_texto);
Mensagem mensagem = (Mensagem) getItem(i);
if(idDoCliente != mensagem.getId()){
linha.setBackgroundColor(Color.CYAN);
}
texto.setText(mensagem.getTexto());
return linha;
}
}
Mensagem
package com.androidera.silvanioduartedacruz.aplicativochat.modelo;
/**
* Created by silvanioduartedacruz on 03/03/17.
*/
public class Mensagem {
private String texto;
private Integer id;
public Mensagem(int id, String texto) {
this.id = id;
this.texto = texto;
}
public String getTexto() {
return texto;
}
public int getId() {
return id;
}
}