Java listview出现错误
我有这个代码,我不知道是什么错误: 包com.shoukurasouJava listview出现错误,java,android,Java,Android,我有这个代码,我不知道是什么错误: 包com.shoukurasou import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.ArrayList; import java.ut
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.view.WindowManager;
import android.widget.*;
public class ShoutActivity extends Activity {
public void update_shouts() throws IOException{
URL url;
String inputLine = null;
url = new URL("http://MYSITE/shouts.php");
URLConnection conn = url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "Windows-1252"));
inputLine = br.readLine().toString();
List<String> shouts = new ArrayList<String>();
String[] shoutsplit = inputLine.split("<item>");
for(int i = 0; i < shoutsplit.length; i++){
String username = shoutsplit[i].split("<info>")[0].toString();
String shout = shoutsplit[i].split("<info>")[1].toString();
shouts.add(username+": "+Html.fromHtml(shout));
}
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, shouts);
final ListView list = (ListView) findViewById(R.id.list);
if(list != null){
ShoutActivity.this.runOnUiThread(new Runnable() {
public void run() {
list.setAdapter(null);
list.setAdapter(adapter);
}
});
}else{
new AlertDialog.Builder(this).setTitle("Erro!").setMessage("Este erro é comum, por favor, feche e abra o aplicativo novamente.").setNeutralButton("Ok", null).show();
}
br.close();
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shout);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
update_shouts();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 0, 1000);
}
public void sendShout(View v) throws IOException{
String login = null;
String password = null;
String edit1value = null;
Bundle extras = getIntent().getExtras();
login = extras.getString("login").toString();
password = extras.getString("password").toString();
EditText edit1 = (EditText) findViewById(R.id.editText1);
edit1value = URLEncoder.encode(edit1.getText().toString());
URL shout;
shout = new URL("http://MYSITE/send_shout.php?username="+login+"&password="+password+"&shout="+edit1value);
URLConnection connection_shout = shout.openConnection();
BufferedReader brshout = new BufferedReader(new InputStreamReader(connection_shout.getInputStream()));
edit1.setText("");
}
}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.net.URL;
导入java.net.URLConnection;
导入java.net.urlcoder;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Timer;
导入java.util.TimerTask;
导入android.app.Activity;
导入android.app.AlertDialog;
导入android.os.Bundle;
导入android.text.Html;
导入android.view.view;
导入android.view.WindowManager;
导入android.widget.*;
公共课堂活动拓展活动{
public void update_shouts()引发IOException{
网址;
字符串inputLine=null;
url=新url(“http://MYSITE/shouts.php");
URLConnection conn=url.openConnection();
BufferedReader br=新的BufferedReader(新的InputStreamReader(conn.getInputStream(),“Windows-1252”);
inputLine=br.readLine().toString();
List shouts=new ArrayList();
字符串[]shoutsplit=inputLine.split(“”);
对于(int i=0;i
错误:
11-11 01:34:34.649:E/AndroidRuntime(272):致命异常:计时器-0
11-11 01:34:34.649:E/AndroidRuntime(272):java.lang.ArrayIndexOutOfBoundsException
11-11 01:34:34.649:E/AndroidRuntime(272):在com.shoukurasou.ShoutActivity.update_shouts(ShoutActivity.java:40)
11-11 01:34:34.649:E/AndroidRuntime(272):在com.shoukurasou.ShoutActivity$2.run(ShoutActivity.java:76)
11-11 01:34:34.649:E/AndroidRuntime(272):在java.util.Timer$TimerImpl.run(Timer.java:289)
我不知道是什么错误,我对我的英语很抱歉,我来自巴西,thx这一行需要在UI线程上调用,因为适配器的
getView()
管理UI
试着这样运行:
ShoutActivity.this.runOnUiThread(new Runnable() {
public void run() {
list.setAdapter(adapter);
}
});
列表
和适配器
必须标记为最终
,为了修改线程中的ui,您必须实现一个处理程序
首先,添加:
Looper.prepare();
到计时器run()
方法的开头
然后您可以创建如下处理程序:
Handler handler = new Handler();
handler.post(new Runnable(){
@Override
public void run(){
ListView list = (ListView) findViewById(R.id.list);
list.setAdapter(null);
list.setAdapter(adapter)
}
然后,您应该将listview代码添加到runnable中,以使我们的处理程序按如下方式运行:
Handler handler = new Handler();
handler.post(new Runnable(){
@Override
public void run(){
ListView list = (ListView) findViewById(R.id.list);
list.setAdapter(null);
list.setAdapter(adapter)
}
那应该能解决你的问题 不工作,我得到这个:11-10 20:22:44.585:E/AndroidRuntime(270):致命异常:main 11-10 20:22:44.585:E/AndroidRuntime(270):java.lang.nullpointer异常11-10 20:22:44.585:E/AndroidRuntime(270):在com.shoukurasou.ShoutActivity$1.run(ShoutActivity.java:52)11-10 20:22:44.585:E/AndroidRuntime(270):在android.os.Handler.handleCallback(Handler.java:587)11-10 20:22:44.585:E/AndroidRuntime(270):在android.os.Handler.dispatchMessage(Handler.java:92)11-10 20:22:44.585:E/AndroidRuntime(270):在android.os.Looper.java:123)11-10 20:22:44.585:E/AndroidRuntime(270):……我将列表设置为空以清除,设置适配器后,如果适配器不为null,则可以使用setAdapter(null)删除该行。还要检查findViewById是否返回了某些内容!=null=/Error,它说“ShoukuraSou stopped”D=在几秒钟后显示此错误并关闭应用程序,我将编辑代码编辑,查看代码,但我没有日志,因为在emulator中不给出错误或应用程序关闭,但在celphone中//关闭应用程序=/