2013-03-17 9 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(); 

     } 

} 

-Контактный класс

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) {} 
} 
} 

Я знаю, что знаю, есть некоторые части кода, которые не используются. Моя следующая задача - заставить это приложение отправлять команды на сервер ... поэтому я все еще экспериментирую.

При запуске приложения на эмуляторе он останавливается, даже показывая какие-либо компоненты графического интерфейса пользователя. Любая идея почему? Вот что говорит файл журнала

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

+0

И рядом с этим было бы неплохо, если бы вы могли опубликовать logcat. Тогда легче обнаружить проблему;) – j0chn

+0

Вопросы программирования не по теме для этого сайта, что касается вопросов о * использовании * Android. Кроме того, эта строка сообщает вам все, что вам нужно для устранения проблемы: 'Caused by: java.lang.NullPointerException at com.example.streamerclient.MainActivity.onResume (MainActivity.java:20)' –

ответ

0

Попробуйте переместить содержимое всего объекта onResume() в метод onCreate(). Всегда выполняйте настройку пользовательского интерфейса в onCreate(). Читайте это: Activity Lifecycle Management.

И принимать какие-либо дополнительные вопросы к StackOverflow :)

Ура!

0

Вы получаете исключение NullPointerException в строке 20 в MainActivity, проверьте эту строку.
Я думаю, что этот вопрос лучше подходит для stackoverflow

Смежные вопросы