【问题标题】:Java/Android: Unable to start activity ComponentInfo{...}: java.lang.NullPointerExceptionJava/Android:无法启动活动 ComponentInfo{...}:java.lang.NullPointerException
【发布时间】:2014-07-12 10:05:34
【问题描述】:

这是我的第一个应用程序之一 - 目前,它应该充当带有 HLK-RM04 的 TCP 终端。

我知道这个错误之前已经发布过,但我没有找到任何适用于我的代码的解决方案。帮助将不胜感激。

注意 #1:即使连接可用,也会出现相同的错误。

注意 #2:如果我删除第 77-84 和 98 行,如果连接可用,则不会给出错误(如果不可用,应用程序将退出)。

看似错误的代码:

package com.milk.milkdispenser;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.util.Log;
import android.os.Handler;


import java.util.Timer;
import java.util.TimerTask;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.io.IOException;

public class MainActivity extends Activity {

    //Debug string
    String msg= "milkMsg";

    //Variables
    String tmp;

    //Declaring buffers...
    PrintWriter outp;
    BufferedReader inp;


    //Objects
    EditText txt;
    Button send;
    Button clear;
    TextView output;

    //Handler
    final Handler MyHandler = new Handler();

    //Socket

    Socket s;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);
        Log.d(msg, "Starting app...");

        //assigning objects

        txt = (EditText) findViewById(R.id.editText1);
        send = (Button) findViewById(R.id.button1);
        clear = (Button) findViewById(R.id.button2);
        output = (TextView) findViewById(R.id.textView1);

        //Connecting socket

        try{s=new Socket("192.168.11.154",8080);}
        catch(IOException err1){
            Log.d(msg, "ERROR: Could not connect!");
            Log.d(msg, msg, err1.getCause());
            Log.d(msg, err1.getMessage());
            Toast.makeText(this, "Connection error - restart the app", Toast.LENGTH_LONG).show();
            this.finish();
            }

        //Defining Buffers...

        try {
            outp = new PrintWriter(s.getOutputStream(), true);
            //LINE 78 ABOVE!!!!!!!
            inp = new BufferedReader(new InputStreamReader(s.getInputStream()));
            tmp = inp.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //Timer routines

        MyTimerTask myTask = new MyTimerTask();
        Timer myTimer = new Timer();
        myTimer.schedule(myTask, 0, 200);

        //Sending message
        //txt.getText()
        send.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                Log.d(msg, "Sending text...");
                //Sending text...
                outp.print(txt.getText().toString()+"\r\n");
                txt.setText("");
                }
            });
        clear.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                Log.d(msg, "Clearing...");
                output.setText("");
            }
        });
    }

    class MyTimerTask extends TimerTask{
        @Override
        public void run(){
            MyHandler.post(myRunnable);
        }
    }

    final Runnable myRunnable = new Runnable() {
        public void run() {
            //Buffer verifying..

    }};

    protected void onDestroy(){
        super.onDestroy();
        Log.d(msg, "CLOSING!");
        try {
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

LogCat(更新后显示异常):

07-12 03:41:20.520: D/milkMsg(4646): Starting app...
07-12 03:41:20.520: D/milkMsg(4646): ERROR: Could not connect!
07-12 03:41:20.540: D/milkMsg(4646): milkMsg
07-12 03:41:20.540: D/milkMsg(4646): libcore.io.ErrnoException: socket failed: EACCES (Permission denied)
07-12 03:41:20.540: D/milkMsg(4646):    at libcore.io.Posix.socket(Native Method)
07-12 03:41:20.540: D/milkMsg(4646):    at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:181)
07-12 03:41:20.540: D/milkMsg(4646):    at libcore.io.IoBridge.socket(IoBridge.java:568)
07-12 03:41:20.540: D/milkMsg(4646):    at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)
07-12 03:41:20.540: D/milkMsg(4646):    at java.net.Socket.startupSocket(Socket.java:559)
07-12 03:41:20.540: D/milkMsg(4646):    at java.net.Socket.tryAllAddresses(Socket.java:127)
07-12 03:41:20.540: D/milkMsg(4646):    at java.net.Socket.<init>(Socket.java:177)
07-12 03:41:20.540: D/milkMsg(4646):    at java.net.Socket.<init>(Socket.java:149)
07-12 03:41:20.540: D/milkMsg(4646):    at com.milk.milkdispenser.MainActivity.onCreate(MainActivity.java:66)
07-12 03:41:20.540: D/milkMsg(4646):    at android.app.Activity.performCreate(Activity.java:5008)
07-12 03:41:20.540: D/milkMsg(4646):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
07-12 03:41:20.540: D/milkMsg(4646):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
07-12 03:41:20.540: D/milkMsg(4646):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
07-12 03:41:20.540: D/milkMsg(4646):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
07-12 03:41:20.540: D/milkMsg(4646):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
07-12 03:41:20.540: D/milkMsg(4646):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-12 03:41:20.540: D/milkMsg(4646):    at android.os.Looper.loop(Looper.java:137)
07-12 03:41:20.540: D/milkMsg(4646):    at android.app.ActivityThread.main(ActivityThread.java:4745)
07-12 03:41:20.540: D/milkMsg(4646):    at java.lang.reflect.Method.invokeNative(Native Method)
07-12 03:41:20.540: D/milkMsg(4646):    at java.lang.reflect.Method.invoke(Method.java:511)
07-12 03:41:20.540: D/milkMsg(4646):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-12 03:41:20.540: D/milkMsg(4646):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-12 03:41:20.540: D/milkMsg(4646):    at dalvik.system.NativeStart.main(Native Method)
07-12 03:41:20.540: D/milkMsg(4646): socket failed: EACCES (Permission denied)
07-12 03:41:20.610: D/AndroidRuntime(4646): Shutting down VM
07-12 03:41:20.610: W/dalvikvm(4646): threadid=1: thread exiting with uncaught exception (group=0x40c73300)
07-12 03:41:20.620: E/AndroidRuntime(4646): FATAL EXCEPTION: main
07-12 03:41:20.620: E/AndroidRuntime(4646): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.milk.milkdispenser/com.milk.milkdispenser.MainActivity}: java.lang.NullPointerException
07-12 03:41:20.620: E/AndroidRuntime(4646):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at android.os.Looper.loop(Looper.java:137)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at android.app.ActivityThread.main(ActivityThread.java:4745)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at java.lang.reflect.Method.invokeNative(Native Method)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at java.lang.reflect.Method.invoke(Method.java:511)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at dalvik.system.NativeStart.main(Native Method)
07-12 03:41:20.620: E/AndroidRuntime(4646): Caused by: java.lang.NullPointerException
07-12 03:41:20.620: E/AndroidRuntime(4646):     at com.milk.milkdispenser.MainActivity.onCreate(MainActivity.java:78)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at android.app.Activity.performCreate(Activity.java:5008)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
07-12 03:41:20.620: E/AndroidRuntime(4646):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
07-12 03:41:20.620: E/AndroidRuntime(4646):     ... 11 more

【问题讨论】:

  • MainActivity 的第 76 行是什么?
  • 发布您的 MainActivty 代码。
  • 我已经发布了我的全部代码。另外,第 76 行下面有注释。
  • 在“无法连接!”处记录先前的异常查看 NetworkOnMainThreadException
  • 在'Starting app'和'Could not connect'行之前没有日志...

标签: java android sockets bufferedreader printwriter


【解决方案1】:
libcore.io.ErrnoException: socket failed: EACCES (Permission denied)

07-12 03:41:20.540:D/milkMsg(4646):在 libcore.io.Posix.socket(本机方法)

首先,您缺少互联网权限。添加到您的清单中:

<uses-permission android:name="android.permission.INTERNET" />

其次,您正在 UI 线程上执行网络操作。使用例如将它们移动到后台线程AsyncTask。见How to fix android.os.NetworkOnMainThreadException?

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 2014-07-18
    • 2014-05-10
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多