Android线程,后台进程

拉希德·科尔德罗(Rashid Cordero)

我想在Arraylist上添加ipaddress来更新具有自己的适配器的listview,但是我收到错误消息,并且它在检测到服务器套接字时停止了我的应用程序。此代码在后台运行,该后台正在扫描子网的ipaddress并将地址保存到PostList类。

public class MainActivity extends Activity {

ListView lv;
ArrayList<PostList> list;
ArrayAdapter<PostList> adapter;
int port = 50000;
String ipadd = "192.168.254.";


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

    lv = (ListView)findViewById(R.id.iplist);



        scanIP(ipadd,port);


}

private void scanIP(final String ipadd, final int port){
   final Handler mHandler = new Handler();


   new Thread(new Runnable() {


    @Override
    public void run() {
        // TODO Auto-generated method stub
        for (int i = 95; i < 105; i++){
            final String ipaddress = ipadd + i;   
        try {
            Socket socket = new Socket(ipaddress,port);
            if (socket.isConnected()){
                  try {
                        Log.d("ClientActivity", "C: Sending command.");
                        PrintWriter out = new PrintWriter(new BufferedWriter(new   OutputStreamWriter(socket
                                    .getOutputStream())), true);
                            out.println("Hey Server im " + ipaddress);
                            Log.d("ClientActivity", "C: Sent.");
                    } catch (Exception e) {
                        Log.e("ClientActivity", "S: Error", e);
                    }

                  runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        insertValue(ipaddress);
                    }


                });


            }
            socket.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 }
}).start();    


}
private void insertValue(String ipaddress) {
    // TODO Auto-generated method stub
    list.add(new PostList(ipaddress));
    adapter = new PostAdapter(MainActivity.this, list);
    lv.setAdapter(adapter);
}

}

Logcat错误,该错误在获取我的服务器IP地址时显示

12-28 20:15:17.579: I/System.out(15675): [CDS]connect[/192.168.254.100:50000] tm:90
12-28 20:15:17.580: D/Posix(15675): [Posix_connect Debug]Process com.example.practice_socket :50000 
12-28 20:15:17.586: D/ClientActivity(15675): C: Sending command.
12-28 20:15:17.587: D/ClientActivity(15675): C: Sent.
12-28 20:15:17.588: D/AndroidRuntime(15675): Shutting down VM
12-28 20:15:17.588: W/dalvikvm(15675): threadid=1: thread exiting with uncaught exception (group=0x411da9a8)
12-28 20:15:17.589: E/test(15675): Exception
12-28 20:15:17.590: E/AndroidRuntime(15675): FATAL EXCEPTION: main
12-28 20:15:17.590: E/AndroidRuntime(15675): java.lang.NullPointerException
12-28 20:15:17.590: E/AndroidRuntime(15675):    at com.example.practice_socket.MainActivity.insertValue(MainActivity.java:95)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at com.example.practice_socket.MainActivity.access$0(MainActivity.java:93)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at com.example.practice_socket.MainActivity$1$1.run(MainActivity.java:74)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at android.os.Handler.handleCallback(Handler.java:725)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at android.os.Looper.loop(Looper.java:153)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at android.app.ActivityThread.main(ActivityThread.java:5299)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at java.lang.reflect.Method.invokeNative(Native Method)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at java.lang.reflect.Method.invoke(Method.java:511)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
12-28 20:15:17.590: E/AndroidRuntime(15675):    at dalvik.system.NativeStart.main(Native Method)
最大极限

确保在调用list.add()之前实例化了列表对象:

list = new ArrayList<PostList>();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android和后台进程

来自分类Dev

Android长期后台线程

来自分类Dev

Android后台进程触发代码

来自分类Dev

android addView在后台线程

来自分类Dev

Android - 后台线程垃圾收集

来自分类Dev

后台线程什么时候可以阻止进程终止?

来自分类Dev

在后台线程上可观察到的进程

来自分类Dev

Tkinter和线程控制连续的后台进程

来自分类Dev

如何避免android后台进程饥饿?

来自分类Dev

Android上的后台进程计时器

来自分类Dev

在Android中后台运行进程

来自分类Dev

如何避免android后台进程饥饿?

来自分类Dev

Android进程功能无法在后台运行

来自分类Dev

从后台线程完成android活动是否安全?

来自分类Dev

Android后台服务和线程

来自分类Dev

后台线程上的Android live数据转换

来自分类Dev

Android后台服务中的线程

来自分类Dev

Android后台线程不断监听UDP端口

来自分类Dev

android线程和处理程序-从后台线程更改UI对象

来自分类Dev

如果进程实际上只是后台进程,Linux如何在线程退出时清理线程?

来自分类Dev

从Linux在Android上启动持久性后台进程

来自分类Dev

如何在Android中等待后台进程完成

来自分类Dev

Android-在后台杀死相机进程

来自分类Dev

如何在Android中反复运行后台进程

来自分类Dev

进程是线程还是线程是进程?

来自分类Dev

为什么此后台线程中未处理的异常不会终止我的进程?

来自分类Dev

Python,在后台运行一个进程,并从主线程获取状态

来自分类Dev

Python,在后台运行一个进程,并从主线程获取状态

来自分类Dev

如何在后台线程或进程中有效使用PyJulia或其他非线程安全的库?