2014-09-24 2 views
0

Я новичок в Android, и мне нужно решить эту проблему. У меня есть приложение для чата, которое я создал с использованием кода, который я использовал в Java, и реализованного в android ui, но похоже, что он не работает. Я думаю, что проблема с AsyncTask«К сожалению приложение остановилось» с NPE

Я отправляю код и лог-код с манифестом ниже.

Главная Деятельность

package com.A_apps.test_im; 
import java.io.DataInputStream; 
import java.io.IOException; 
import java.io.PrintStream; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import android.app.Activity: 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
    Task task; 
    boolean closed = false; 

//Thread 

Thread Clientthread; 

// The client socket 

Socket clientSocket = null; 

// The output stream 

PrintStream os = null; 

// The input stream 

DataInputStream is = null; 

TextView textview1 = (TextView)findViewById(R.id.textView1); 
EditText mymsg = (EditText)findViewById(R.id.editText1); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

    StrictMode.setThreadPolicy(policy); 
    Start(); 

    } 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
public void Start(){ 
    try { 
      clientSocket = new Socket("192.168.1.10", 2222); 
      os = new PrintStream(clientSocket.getOutputStream()); 
      is = new DataInputStream(clientSocket.getInputStream()); 
     } catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
} 
public void sendMessage(){ 
    String msg = null; 
    while (!closed&&(msg = mymsg.getText().toString()) != null) { 
     os.println(msg); 
     textview1.append("\nMe: "+msg); 
     } 

} 
public void initialize(){ 

    if (clientSocket != null && os != null && is != null) { 
     /* Create a thread to read from the server. */ 
     task = new Task(); 
     task.execute(textview1,mymsg); 
     //Clientthread = new Thread(new Runnable(){ 

      /*@Override 
      public void run() { 
       /* 
       * Keep on reading from the socket till we receive "Bye" from the 
       * server. Once we received that then we want to break. 

       os.println("Arnav"); 
       String responseLine; 
       try { 
        while ((responseLine = is.readLine()) != null) { 
        textview1.append("\nOther: "+responseLine); 

        } 
        closed = true; 
       } catch (IOException e) { 
        System.err.println("IOException: " + e); 
       }}*/ 
     // }); 
     // Clientthread.start(); 
     } 

} 
public void CloseConnections(){ 
    try { 
     os.close(); 
     is.close(); 
     clientSocket.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
}} 

Целевая Класс

package com.A_apps.test_im; 

import java.io.DataInputStream; 
import java.io.IOException; 
import java.io.PrintStream; 
import java.net.Socket; 
import java.net.URL; 

import android.os.AsyncTask; 
import android.widget.EditText; 
import android.widget.TextView; 

public class Task extends AsyncTask<TextView, EditText, Socket>{ 
String responseLine; 
MainActivity activity = new MainActivity(); 
protected void onPostExecute(Long result) { 

} 
@Override 
protected Socket doInBackground(TextView... params) { 


     try { 
      while ((responseLine = activity.is.readLine()) != null) { 
      runOnUiThread(); 
      } 
      activity.closed = true; 
     } catch (IOException e) { 
      System.err.println("IOException: " + e); 
     } 
     return null; 
} 


public final void runOnUiThread(){ 
    activity.textview1.append("\nOther: "+responseLine); 
}} 

Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.A_apps.test_im" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="16" 
    android:targetSdkVersion="19" /> 
<uses-permission android:name="android.permission.INTERNET"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

И Logcat

09-24 05:37:54.906: D/AndroidRuntime(1610): Shutting down VM 
09-24 05:37:54.906: W/dalvikvm(1610): threadid=1: thread exiting with uncaught exception   (group=0xb3a7fba8) 
09-24 05:37:54.916: E/AndroidRuntime(1610): FATAL EXCEPTION: main 
09-24 05:37:54.916: E/AndroidRuntime(1610): Process: com.A_apps.test_im, PID: 1610 
09-24 05:37:54.916: E/AndroidRuntime(1610): java.lang.RuntimeException: Unable to instantiate    activity ComponentInfo{com.A_apps.test_im/com.A_apps.test_im.MainActivity}:  java.lang.NullPointerException 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at android.os.Handler.dispatchMessage(Handler.java:102) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at android.os.Looper.loop(Looper.java:136) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at java.lang.reflect.Method.invoke(Method.java:515) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at dalvik.system.NativeStart.main(Native Method) 
09-24 05:37:54.916: E/AndroidRuntime(1610): Caused by: java.lang.NullPointerException 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at android.app.Activity.findViewById(Activity.java:1884) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at com.A_apps.test_im.MainActivity.<init>(MainActivity.java:45) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at java.lang.Class.newInstanceImpl(Native Method) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at java.lang.Class.newInstance(Class.java:1208) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112) 
09-24 05:37:54.916: E/AndroidRuntime(1610):  ... 11 more 
09-24 05:37:57.406: I/Process(1610): Sending signal. PID: 1610 SIG: 9 

Update:

The logcat 
09-24 06:27:04.213: D/dalvikvm(1218): GC_FOR_ALLOC freed 61K, 5% free 2977K/3108K, paused 44ms,  total 46ms 
09-24 06:27:04.223: I/dalvikvm-heap(1218): Grow heap (frag case) to 3.449MB for 500416-byte allocation 
09-24 06:27:04.273: D/dalvikvm(1218): GC_FOR_ALLOC freed 4K, 4% free 3461K/3600K, paused 50ms, total 50ms 
09-24 06:27:04.473: W/dalvikvm(1218): threadid=11: thread exiting with uncaught exception (group=0xb3a46ba8) 
09-24 06:27:04.483: E/AndroidRuntime(1218): FATAL EXCEPTION: AsyncTask #1 
09-24 06:27:04.483: E/AndroidRuntime(1218): Process: com.A_apps.test_im, PID: 1218 
09-24 06:27:04.483: E/AndroidRuntime(1218): java.lang.RuntimeException: An error occured while executing doInBackground() 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at android.os.AsyncTask$3.done(AsyncTask.java:300) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at java.lang.Thread.run(Thread.java:841) 
09-24 06:27:04.483: E/AndroidRuntime(1218): Caused by: java.lang.NullPointerException 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at com.A_apps.test_im.Task.doInBackground(Task.java:29) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at com.A_apps.test_im.Task.doInBackground(Task.java:1) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
09-24 06:27:04.483: E/AndroidRuntime(1218):  ... 4 more 
09-24 06:27:04.623: D/(1218): HostConnection::get() New Host Connection established 0xb8d4d2d0, tid 1218 
09-24 06:27:04.763: W/EGL_emulation(1218): eglSurfaceAttrib not implemented 
09-24 06:27:04.773: D/OpenGLRenderer(1218): Enabling debug mode 0 
09-24 06:27:08.543: I/Process(1218): Sending signal. PID: 1218 SIG: 9 

Update 2:

09-24 07:38:39.123: D/dalvikvm(1541): GC_FOR_ALLOC freed 47K, 4% free 2977K/3092K, paused 107ms, total 109ms 
09-24 07:38:39.123: I/dalvikvm-heap(1541): Grow heap (frag case) to 3.449MB for 500416-byte allocation 
09-24 07:38:39.203: D/dalvikvm(1541): GC_FOR_ALLOC freed 3K, 4% free 3462K/3584K, paused 72ms, total 72ms 
09-24 07:38:39.463: D/(1541): HostConnection::get() New Host Connection established 0xb8d4b9d8, tid 1541 
09-24 07:38:39.563: W/EGL_emulation(1541): eglSurfaceAttrib not implemented 
09-24 07:38:39.573: D/OpenGLRenderer(1541): Enabling debug mode 0 
09-24 07:38:56.213: D/dalvikvm(1541): GC_FOR_ALLOC freed 344K, 11% free 3632K/4044K, paused 36ms, total 37ms 
09-24 07:39:00.433: D/dalvikvm(1541): GC_FOR_ALLOC freed 431K, 12% free 3713K/4212K, paused 44ms, total 45ms 
09-24 07:39:03.113: D/dalvikvm(1541): GC_FOR_ALLOC freed 263K, 12% free 3753K/4248K, paused 35ms, total 35ms 
09-24 07:39:05.553: D/dalvikvm(1541): GC_FOR_ALLOC freed 277K, 12% free 3823K/4316K, paused 38ms, total 38ms 
09-24 07:39:09.783: D/dalvikvm(1541): GC_FOR_ALLOC freed 404K, 11% free 3879K/4352K, paused 41ms, total 41ms 
09-24 07:39:13.133: D/dalvikvm(1541): GC_FOR_ALLOC freed 339K, 11% free 3942K/4420K, paused 39ms, total 39ms 
09-24 07:39:13.133: I/dalvikvm-heap(1541): Grow heap (frag case) to 4.039MB for 131076-byte allocation 
09-24 07:39:13.183: D/dalvikvm(1541): GC_FOR_ALLOC freed 64K, 12% free 4006K/4552K, paused 40ms, total 40ms 
09-24 07:39:18.623: D/dalvikvm(1541): GC_FOR_ALLOC freed 453K, 12% free 4050K/4572K, paused 42ms, total 43ms 
09-24 07:39:18.713: D/dalvikvm(1541): GC_FOR_ALLOC freed 19K, 12% free 4066K/4608K, paused 38ms, total 38ms 
09-24 07:39:18.763: D/dalvikvm(1541): GC_FOR_ALLOC freed 17K, 13% free 4083K/4644K, paused 39ms, total 39ms 
09-24 07:39:18.763: I/dalvikvm-heap(1541): Grow heap (frag case) to 4.083MB for 32772-byte allocation 
09-24 07:39:19.853: D/dalvikvm(1541): GC_FOR_ALLOC freed 0K, 13% free 4115K/4680K, paused 1083ms, total 1083ms 
09-24 07:39:19.853: I/dalvikvm-heap(1541): Grow heap (frag case) to 4.114MB for 32772-byte allocation 
09-24 07:39:19.903: D/dalvikvm(1541): GC_FOR_ALLOC freed 32K, 13% free 4115K/4716K, paused 45ms, total 45ms 
09-24 07:39:25.163: D/dalvikvm(1541): GC_FOR_ALLOC freed 462K, 12% free 4164K/4716K, paused 42ms, total 42ms 
09-24 07:39:28.573: D/dalvikvm(1541): GC_FOR_ALLOC freed 328K, 11% free 4199K/4716K, paused 48ms, total 48ms 
09-24 07:39:28.583: I/dalvikvm-heap(1541): Grow heap (frag case) to 4.290MB for 131068-byte allocation 
09-24 07:39:28.623: D/dalvikvm(1541): GC_FOR_ALLOC freed 64K, 13% free 4263K/4848K, paused 46ms, total 46ms 
09-24 07:39:33.803: D/dalvikvm(1541): GC_FOR_ALLOC freed 462K, 12% free 4312K/4848K, paused 49ms, total 49ms 
09-24 07:39:35.643: D/dalvikvm(1541): GC_FOR_ALLOC freed 171K, 11% free 4330K/4848K, paused 46ms, total 46ms 
09-24 07:39:35.643: I/dalvikvm-heap(1541): Grow heap (frag case) to 4.542MB for 262148-byte allocation 
09-24 07:39:35.703: D/dalvikvm(1541): GC_FOR_ALLOC freed 128K, 13% free 4458K/5108K, paused 46ms, total 47ms 
09-24 07:39:41.923: D/dalvikvm(1541): GC_FOR_ALLOC freed 519K, 12% free 4513K/5108K, paused 49ms, total 49ms 
09-24 07:39:46.733: D/dalvikvm(1541): GC_FOR_ALLOC freed 431K, 11% free 4559K/5108K, paused 53ms, total 53ms 
09-24 07:39:46.933: I/dalvikvm(1541): threadid=3: reacting to signal 3 
09-24 07:39:46.943: D/dalvikvm(1541): GC_FOR_ALLOC freed 37K, 12% free 4593K/5176K, paused 149ms, total 149ms 
09-24 07:39:47.033: I/dalvikvm(1541): Wrote stack traces to '/data/anr/traces.txt' 
09-24 07:39:47.183: D/dalvikvm(1541): GC_FOR_ALLOC freed 32K, 12% free 4625K/5244K, paused 150ms, total 150ms 
+0

исключения нулевого указателя в строке 1884, вы можете разместите там строку – Supriya

+0

Вы много чего делаете wro ng, особенно с потоками. Просьба ознакомиться с официальной документацией. –

+0

Также стоит прочитать: жизненный цикл деятельности и возможность создания экземпляров с помощью 'new' - хорошая идея (подсказка: это не так). – laalto

ответ

0

Измените файл task.java

package com.A_apps.test_im; 

import java.io.DataInputStream; 
import java.io.IOException; 
import java.io.PrintStream; 
import java.net.Socket; 
import java.net.URL; 

import android.os.AsyncTask; 
import android.widget.EditText; 
import android.widget.TextView; 

public class Task extends AsyncTask<TextView, String, Socket>{ 
String responseLine; 
    MainActivity activity; 

public Task(MainActivity activity){ 
    this.activity= activity; 

} 

protected void onPostExecute(Long result) { 

} 
@Override 
protected Socket doInBackground(TextView... params) { 


    try { 
     while ((responseLine = activity.is.readLine()) != null) { 
     publishProgress("\nOther: "+responseLine); 
     } 
     activity.closed = true; 
    } catch (IOException e) { 
     System.err.println("IOException: " + e); 
    } 
    return null; 
} 

@Override 
    protected void onProgressUpdate(String... values) { 
     // TODO Auto-generated method stub 
     super.onProgressUpdate(values); 
activity.textview1.append(values[0]); 

    } 

} 

и заменить

task = new Task(); 

в

task = new Task(this); 

в инициализации функции в mainactivity

+0

Это сработало, но теперь, когда я пытаюсь использовать функцию sendMessage, он снова останавливает приложение –

+0

, пожалуйста, опишите метод sendMessage и журнал сообщений об ошибке –

+0

У меня проблема: все нормально, приложение работает нормально, пока я не нажимаю кнопку отправки, которая имеет «android: onclick:« sendMessage », поэтому, когда я нажимаю кнопку отправки, она зависает от приложения и через некоторое время app не отвечает –

2

Вы должны двигаться

TextView textview1 = (TextView)findViewById(R.id.textView1); 
EditText mymsg = (EditText)findViewById(R.id.editText1); 

под onCreate() после setContentView(R.layout.activity_main); в вашем MainActivity

+0

Хорошо, я пробовал это, но всякий раз, когда я вызываю initialize(); приложение останавливается снова, если u хочет logcat, я опубликую его –

+0

@ArnavpunitJain Опубликуйте свой logcat, затем ... –

+0

Добавлен обновленный logcat –

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