簡體   English   中英

Android應用程序無法在模擬器上運行

[英]Android application unable to run on emulator

我對android開發非常陌生,我正在嘗試開發一個服務器-客戶端應用程序,其中服務器是一個簡單的Java應用程序,它從文件中讀取一些文本並使用輸出流將其發送。 客戶端是一個android應用程序,當單擊按鈕時會讀取此流並將其顯示在文本視圖中。

我將eclipse與ADK一起使用,並在模擬器上進行測試,這是兩種代碼的樣子:

服務器:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;


public class Server {
     /**
     * @param args
     * @throws IOException 
     * @throws UnknownHostException 
     */
    public static void main(String[] args) throws UnknownHostException, IOException 
    {

        System.out.println("***********Starting ***********");
        ServerSocket servsock = new ServerSocket(12344);
        System.out.println("Waiting...");

        Socket sock = servsock.accept();
        while (true) 
        {
          System.out.println("Accepted connection : " + sock);
          File myFile = new File ("source.txt");
          while (true){
          byte [] mybytearray  = new byte [(int)myFile.length()];
          FileInputStream fis = new FileInputStream(myFile);
          BufferedInputStream bis = new BufferedInputStream(fis);
          bis.read(mybytearray,0,mybytearray.length);
           OutputStream os = sock.getOutputStream();
          System.out.println("Sending...");
          os.write(mybytearray,0,mybytearray.length);
          os.flush();

          }    
    }

    }
}

客戶:

-主要活動

package com.example.streamerclient;

import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class MainActivity extends Activity implements OnClickListener {
         Button ConnectBtn ;

          @Override
          public void onResume() {
            super.onResume();
            //setContentView(R.layout.activity_main);

            System.out.println(" on resume ");
            ConnectBtn = (Button)findViewById(R.id.ConnectButton);

            ConnectBtn.setOnClickListener(this);

            }
          @Override
          public void onPause() {
            super.onPause(); 
          }
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            Connecting c = new Connecting();

        }

}

-連接類

    package com.example.streamerclient;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

import android.app.Activity;
import android.widget.TextView;

public class Connecting extends Activity implements Runnable 
{
    private Socket sock;
    private BufferedReader r;
    private BufferedWriter out;
    TextView Data;
    public Connecting ()
    {
        Data = (TextView) findViewById(R.id.DataTextView);
        Thread th = new Thread(this);
        th.start();

    }
    @Override
    public void run() {
        try
        {

        System.out.println("trying to initiated ");
        Data.setText("trying to initiated ");
        sock = new Socket("10.0.2.2",12344);
        System.out.println(" socket initiated ");
        Data.setText(" socket initiated ");
        r = new BufferedReader(new InputStreamReader(sock.getInputStream()));
        Data.setText("  buffer reader initiated  ");
        System.out.println(" buffer reader initiated ");

        out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
        Data.setText("   buffer writer initiated  ");
        System.out.println(" buffer writer initiated ");
        final String data = r.readLine(); 
        Data.setText("   Data read is: \n"+data);
        System.out.println(" Data read is: \n"+data);        
        }
        catch (IOException ioe) { }
    }
 public void OnPause()
 {
     System.out.println(" paused");
        try {
          if (sock != null) {
            sock.getOutputStream().close();
            sock.getInputStream().close();
            sock.close();
            System.out.println(" everything is closed ");
          }
        } catch (IOException e) {}
 }
}

我知道我知道,代碼中有一些未使用的部分..我的下一個任務是讓該應用程序將命令發送到服務器...所以我仍在嘗試。

在模擬器上運行應用程序時,它甚至在顯示任何GUI組件之前都已停止。 知道為什么嗎? 這是日志文件的內容

03-17 08:16:30.886: W/Trace(846): Unexpected value from nativeGetEnabledTags: 0
03-17 08:16:30.886: W/Trace(846): Unexpected value from nativeGetEnabledTags: 0
03-17 08:16:30.886: W/Trace(846): Unexpected value from nativeGetEnabledTags: 0
03-17 08:16:31.016: W/Trace(846): Unexpected value from nativeGetEnabledTags: 0
03-17 08:16:31.016: W/Trace(846): Unexpected value from nativeGetEnabledTags: 0
03-17 08:16:31.126: I/System.out(846):  on resume 
03-17 08:16:31.447: D/AndroidRuntime(846): Shutting down VM
03-17 08:16:31.447: W/dalvikvm(846): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
03-17 08:16:31.457: E/AndroidRuntime(846): FATAL EXCEPTION: main
03-17 08:16:31.457: E/AndroidRuntime(846): java.lang.RuntimeException: Unable to resume activity {com.example.streamerclient/com.example.streamerclient.MainActivity}: java.lang.NullPointerException
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2742)
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771)
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235)
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.os.Looper.loop(Looper.java:137)
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.app.ActivityThread.main(ActivityThread.java:5039)
03-17 08:16:31.457: E/AndroidRuntime(846):  at java.lang.reflect.Method.invokeNative(Native Method)
03-17 08:16:31.457: E/AndroidRuntime(846):  at java.lang.reflect.Method.invoke(Method.java:511)
03-17 08:16:31.457: E/AndroidRuntime(846):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-17 08:16:31.457: E/AndroidRuntime(846):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-17 08:16:31.457: E/AndroidRuntime(846):  at dalvik.system.NativeStart.main(Native Method)
03-17 08:16:31.457: E/AndroidRuntime(846): Caused by: java.lang.NullPointerException
03-17 08:16:31.457: E/AndroidRuntime(846):  at com.example.streamerclient.MainActivity.onResume(MainActivity.java:20)
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1185)
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.app.Activity.performResume(Activity.java:5182)
03-17 08:16:31.457: E/AndroidRuntime(846):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732)
03-17 08:16:31.457: E/AndroidRuntime(846):  ... 12 more

謝謝!

嘗試將整個onResume()的內容移至onCreate()方法。 始終在onCreate()中進行UI設置。 閱讀此: 活動生命周期管理

並進一步查詢stackoverflow :)

干杯!

您在MainActivity的第20行上收到NullPointerException,請檢查該行。
我認為這個問題更適合Stackoverflow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM