2013-06-29 3 views
0

Android 프로젝트에 IRClib (http://moepii.sourceforge.net/irclib/javadoc/org/schwering/irc/lib/package-summary.html) 을 사용하려고합니다. 프로젝트의 'libs'폴더에 irclib.jar을 추가했습니다. 또한 프로젝트의 '참조 된 라이브러리'섹션에 나타나도록 파일을 라이브러리로 추가했습니다. 또한 Android 매니페스트에 '인터넷 사용'권한을 추가했습니다.Android 프로젝트에서 IRClib을 사용합니다.

다음과 같은 예비 코드가 있습니다.

package com.shaarad.airc; 

import java.io.IOException; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.EditText; 
import android.widget.Toast; 

import org.schwering.irc.lib.*; 

public class MainActivity extends Activity { 
EditText text; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    IRCConnection connection=new IRCConnection("irc.freenode.net",6667,6667,"myircpass","shaarad","shaarad","Shaarad"); 
    try { 
     connection.connect(); 
     connection.doJoin("#ubuntu"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     Toast.makeText(getApplicationContext(), "IOE", Toast.LENGTH_SHORT).show(); 
    } 
    if (connection.isConnected()) { 
     Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_SHORT).show(); 
    }else { 
     Toast.makeText(getApplicationContext(), "Not Connected", Toast.LENGTH_SHORT).show(); 
    } 

    text=(EditText)findViewById(R.id.editText1); 
    text.setText(""); 

} 

@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; 
} 

} 

USB 디버깅 모드로 장치를 연결하면 언제든지 작동이 잠시 깜박이고 강제 종료됩니다.

06-29 12:50:53.211: E/AndroidRuntime(12023): FATAL EXCEPTION: main 
06-29 12:50:53.211: E/AndroidRuntime(12023): java.lang.RuntimeException: Unable to  start activity ComponentInfo{com.shaarad.airc/com.shaarad.airc.MainActivity}: android.os.NetworkOnMainThreadException 
06-29 12:50:53.211: E/AndroidRuntime(12023): at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2065) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2090) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at android.app.ActivityThread.access$600(ActivityThread.java:136) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at android.os.Looper.loop(Looper.java:137) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at android.app.ActivityThread.main(ActivityThread.java:4800) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at java.lang.reflect.Method.invokeNative(Native Method) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at java.lang.reflect.Method.invoke(Method.java:511) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at dalvik.system.NativeStart.main(Native Method) 
06-29 12:50:53.211: E/AndroidRuntime(12023): Caused by: android.os.NetworkOnMainThreadException 
06-29 12:50:53.211: E/AndroidRuntime(12023): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at java.net.Socket.tryAllAddresses(Socket.java:113) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at java.net.Socket.<init>(Socket.java:182) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at java.net.Socket.<init>(Socket.java:154) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at org.schwering.irc.lib.IRCConnection.connect(IRCConnection.java:295) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at com.shaarad.airc.MainActivity.onCreate(MainActivity.java:22) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at android.app.Activity.performCreate(Activity.java:5008) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
06-29 12:50:53.211: E/AndroidRuntime(12023): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2029) 
06-29 12:50:53.211: E/AndroidRuntime(12023): ... 11 more 

답변

0

당신은 주 스레드에서 네트워크 작업을 수행 할 수 없습니다, 당신은 (A AsyncTask를 사용하여 같은) 별도의 스레드를 사용하여 활동 이러한 종류의를 수행해야합니다 다음은 디버깅 출력됩니다.

+0

ohh .. :(okay..thanks 많은 도움이 되셨습니다! :) – tigerden

-1

예외가 명확하게 명시된 경우 Caused by: android.os.NetworkOnMainThreadException 주 스레드를 사용하여 네트워크 통신을 수행하면 안됩니다. 그것을 수행해야하는 경우 아래 코드를 사용하십시오.

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

StrictMode.setThreadPolicy(policy); 

그러나이 방법을 사용하면 ANR (활동 응답 없음)이 발생할 수 있으므로 사용하지 않는 것이 좋습니다. 따라서 비동기 작업 접근법이나 서비스 클래스를 더 잘 사용해야합니다.

+0

이것은 올바른 접근법이 아닙니다. 작업에 10 개의 seonds가 있으면 어떻게해야합니까? 전체 기간 동안 응용 프로그램을 사용할 수 없게해야합니까? –

+0

한 옵션을 제공했는데 다른 옵션을 제공했습니다. 최소한 OP에게는 모든 옵션을 알 권리가 있습니다. – DevZer0

+0

AsyncTask를 주 활동 자체에서 사용할 수 있습니까? – tigerden

관련 문제