2014-02-27 42 views
0

我嘗試使用套接字連接從java桌面程序向android發送一個字符串。當用戶點擊android應用程序中的按鈕時,它將顯示來自java應用程序的消息。當我點擊按鈕時,它顯示java.lang.IllegalStateException.I可以在這個網站找到像這樣的許多問題,但沒有人不符合我的要求。java.lang.IllegalStateException在Android中

的Android代碼

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.Socket; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
public class MainActivity extends Activity 
{ 
    private Socket client; 
    private InputStreamReader isr; 
    private BufferedReader bf; 
    private String message; 
    private AsyncClass ac; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
class AsyncClass extends AsyncTask<Void, Void,Void> 
{ 
    protected Void doInBackground(Void... params) 
    { 
      hardtask(); 
      return null; 
    } 
    public void hardtask() 
    { 
      try 
      { 
     client=new Socket("10.0.2.2",7777); 
     isr=new InputStreamReader(client.getInputStream()); 
     bf=new BufferedReader(isr); 
     message=bf.readLine(); 
     Log.v("Message", message); 
     } 
      catch (IOException e) 
      { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
    } 
} 
public void onClick(View view) 
{ 
    ac.execute(); 
} 
@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; 
} 
} 

logcat的

02-27 02:02:02.191: D/gralloc_goldfish(1445): Emulator without GPU emulation detected. 
02-27 02:02:05.541: D/AndroidRuntime(1445): Shutting down VM 
02-27 02:02:05.651: W/dalvikvm(1445): threadid=1: thread exiting with uncaught exception (group=0xb1a7eb90) 
02-27 02:02:05.711: E/AndroidRuntime(1445): FATAL EXCEPTION: main 
02-27 02:02:05.711: E/AndroidRuntime(1445): Process: andro.androreply, PID: 1445 
02-27 02:02:05.711: E/AndroidRuntime(1445): java.lang.IllegalStateException: Could not execute method of the activity 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at android.view.View$1.onClick(View.java:3814) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at android.view.View.performClick(View.java:4424) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at android.view.View$PerformClick.run(View.java:18383) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at android.os.Handler.handleCallback(Handler.java:733) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at android.os.Handler.dispatchMessage(Handler.java:95) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at android.os.Looper.loop(Looper.java:137) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at android.app.ActivityThread.main(ActivityThread.java:4998) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at java.lang.reflect.Method.invoke(Method.java:515) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at dalvik.system.NativeStart.main(Native Method) 
02-27 02:02:05.711: E/AndroidRuntime(1445): Caused by: java.lang.reflect.InvocationTargetException 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at java.lang.reflect.Method.invoke(Method.java:515) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at android.view.View$1.onClick(View.java:3809) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  ... 11 more 
02-27 02:02:05.711: E/AndroidRuntime(1445): Caused by: java.lang.NullPointerException 
02-27 02:02:05.711: E/AndroidRuntime(1445):  at andro.androreply.MainActivity.onClick(MainActivity.java:52) 
02-27 02:02:05.711: E/AndroidRuntime(1445):  ... 14 more 

Java代碼的

import java.io.*; 
import java.net.*; 
public class Server 
{ 
private static String msg="Hai"; 
    private static Socket client; 
private static PrintWriter pw; 
private static ServerSocket socket; 
public static void main(String args[]) 
{ 
    try { 
    socket=new ServerSocket(7777); 
     client= socket.accept(); //Server socket 
     pw=new PrintWriter(client.getOutputStream(),true); 
    pw.write(msg); 
    pw.flush(); 
    pw.close(); 
    client.close(); 
    } 
    catch (IOException e) 
    { 
     System.out.println("Could not listen on port: 7676"); 
    } 
    } 
} 

任何人都可以幫我解決 這個。在此先感謝...

+0

把你的'hardtask( )'代碼到'AsyncTask InBackground(....)' –

+0

您在此處收到的空指針異常在andro.androreply.MainActivity.onClick(MainActivity.java:52)表示您的maina的第52行ctivity .check你犯了什麼錯誤 – 2014-02-27 07:22:49

+1

@MD'hardtask'在'doInbackground'中被調用。 – Raghunandan

回答

1

您需要instantiate ac,然後致電​​。​​是AsyncTask的方法。

ac = new AsyncClass(); 

我看你有沒有

private AsyncClass ac; 

而且

public void onClick(View view) 
{ 
ac.execute(); 
} 

可是你有沒有實例化ac任何地方

+0

是的,我忘了實例化交流對象。在我實例化ac之後,我也無法在logcat中找到名爲message的標記。 –

+0

謝謝我,我得到了答案。 –

0

你有一個變量AsyncClass交流,但你實際上並不初始化它。在你的onClick(),而不是:

ac.execute(); 

做:

new AsyncClass.execute(); 

或初始化中的onCreate(您AC變量)先用:

ac = new AsyncClass(); 
相關問題