2013-03-17 95 views
0

我對Android開發很陌生,我試圖開發一個服務器端應用程序,其中服務器是一個簡單的Java應用程序,它從文件讀取一些文本並使用輸出發送它流。客戶端是一個android應用程序,它在單擊按鈕並在文本視圖中顯示時讀取此流。Android應用程序無法在仿真器上運行

我使用日食與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(); 

      }  
    } 

    } 
} 

客戶:

-MainActivity

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(); 

     } 

} 

-Connecting class

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 

謝謝!

+1

這是一個問題StackOverflow;) – j0chn 2013-03-17 07:12:28

+0

除此之外,它會很好,如果你可以發佈logcat。然後它更容易檢測到這個問題;) – j0chn 2013-03-17 07:23:43

+0

編程問題是這個網站的題外話,這是關於*使用* Android的問題。此外,這一行告訴你需要解決問題的一切:'由com.example.streamerclient.MainActivity.onResume的java.lang.NullPointerException引發(MainActivity.java:20)' – 2013-03-17 10:01:57

回答

0

嘗試將整個onResume()的內容移動到onCreate()方法。總是在onCreate()中進行UI設置。閱讀:Activity Lifecycle Management

並採取任何進一步的查詢,以stackoverflow :)

乾杯!

0

您在MainActivity的第20行中得到NullPointerException,請檢查該行。
我認爲這個問題更適合於stackoverflow

相關問題