2014-01-07 2 views
0

androidTCP 클라이언트 Socket 장치에서 실행 중일 때 응답하지 않는 프로그램이 작동하고 있습니다. 이 프로그램에서 오류를 발견하지 못했습니다.이 문제를 해결할 수 있도록 도와주세요.TCP 클라이언트 소켓이 onActivityResult() 내에서 작동하지 않습니다.

코드

import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import java.util.ArrayList; 

import android.app.Activity; 
import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.os.Bundle; 
import android.speech.RecognizerIntent; 
import android.view.Menu; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    protected static final int RESULT_SPEECH = 1; 

    private ImageButton btnSpeak; 
    private TextView txtText; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     txtText = (TextView) findViewById(R.id.txtText); 

     btnSpeak = (ImageButton) findViewById(R.id.btnSpeak); 

     btnSpeak.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(
         RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 

       intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US"); 

       try { 
        startActivityForResult(intent, RESULT_SPEECH); 
        txtText.setText(""); 
       } catch (ActivityNotFoundException a) { 
        Toast t = Toast.makeText(getApplicationContext(), 
          "OOps! Your device doesn't support Speech to Text", 
          Toast.LENGTH_SHORT); 
        t.show(); 
       } 
      } 
     }); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     switch (requestCode) { 
     case RESULT_SPEECH: { 
      if (resultCode == RESULT_OK && null != data) { 

       ArrayList<String> text = data 
         .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 


       try { 

        txtText.setText(text.get(0)); 
        Socket client = new Socket("192.168.1.104", 4020); //connect to server 
        PrintWriter printwriter = new PrintWriter(client.getOutputStream(),true); 
        printwriter.write(text.get(0)); //write the message to output stream 

        printwriter.flush(); 
        printwriter.close(); 
        client.close(); //closing t\e connection 

        } catch (UnknownHostException e) { 
         System.out.println("ONE"); 
        e.printStackTrace(); 
        } catch (IOException e) { 
         System.out.println("TWO"); 
        e.printStackTrace(); 
        } 
      } 
      break; 
     } 

     } 
    } 
} 

로그 캣

01-07 17:45:53.367: W/System.err(27224): java.net.SocketException: Permission denied 
01-07 17:45:53.414: W/System.err(27224): at org.apache.harmony.luni.platform.OSNetworkSystem.socket(Native Method) 
01-07 17:45:53.414: W/System.err(27224): at dalvik.system.BlockGuard$WrappedNetworkSystem.socket(BlockGuard.java:335) 
01-07 17:45:53.414: W/System.err(27224): at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:216) 
01-07 17:45:53.414: W/System.err(27224): at java.net.Socket.startupSocket(Socket.java:717) 
01-07 17:45:53.414: W/System.err(27224): at java.net.Socket.tryAllAddresses(Socket.java:150) 
01-07 17:45:53.414: W/System.err(27224): at java.net.Socket.<init>(Socket.java:209) 
01-07 17:45:53.414: W/System.err(27224): at java.net.Socket.<init>(Socket.java:176) 
01-07 17:45:53.414: W/System.err(27224): at net.viralpatel.android.speechtotextdemo.MainActivity.onActivityResult(MainActivity.java:78) 
01-07 17:45:53.414: W/System.err(27224): at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
01-07 17:45:53.414: W/System.err(27224): at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
01-07 17:45:53.414: W/System.err(27224): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2578) 
01-07 17:45:53.414: W/System.err(27224): at android.app.ActivityThread.access$2000(ActivityThread.java:117) 
01-07 17:45:53.414: W/System.err(27224): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:965) 
01-07 17:45:53.414: W/System.err(27224): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-07 17:45:53.414: W/System.err(27224): at android.os.Looper.loop(Looper.java:130) 
01-07 17:45:53.414: W/System.err(27224): at android.app.ActivityThread.main(ActivityThread.java:3687) 
01-07 17:45:53.421: W/System.err(27224): at java.lang.reflect.Method.invokeNative(Native Method) 
01-07 17:45:53.421: W/System.err(27224): at java.lang.reflect.Method.invoke(Method.java:507) 
01-07 17:45:53.421: W/System.err(27224): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
01-07 17:45:53.421: W/System.err(27224): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
01-07 17:45:53.421: W/System.err(27224): at dalvik.system.NativeStart.main(Native Method) 
01-07 17:45:53.437: W/IME_TAG(1510): unbindCurrentClientLocked:: mCurClient.client:[email protected],mCaller.obtainMessageIO(MSG_UNBIND_METHOD, mCurSeq, mCurClient.client):{ what=3000 when=-13h21m11s837ms arg1=719 [email protected]6758 } 
01-07 17:45:53.437: W/IME_TAG(1510): unbindCurrentClientLocked:: try 
+0

기본 대소 문자를 추가하고 다른 문자가 반환되는지 확인해보십시오. – OrhanC1

+0

여전히 동일합니다 .. –

+1

방금 ​​뭔가 알아 챘습니다. 'System.out.println' 대신에'Log.d ("MyTag", "MyMsg")' – OrhanC1

답변

1

이있는 네트워크 권한을 포함하고자하는 스레드를 시작 별도의 스레드 내부 네트워크 코드를 삽입 System.out.println을로 명시하고 변경하십시오. Logcat에 출력하려면을 입력하십시오.

0

더 나은 당신이 다음

+0

사이드에서 스레드를 시작할 수 있습니다.이 'onActivityResult()' –

+0

예. 당신은 runnable 또는 확장 스레드를 구현해야합니다. – damian

관련 문제