2014-03-01 113 views
0

我的第一個Android應用程序,我試圖與UniMag SDK集成。我在下面列出了我的邏輯。基本上我試圖使用UniMag SDK,但他們提供的示例邏輯對於我需要做的事情來說非常複雜。最終,我只是想建立一個網絡視圖,我的swiper會通過JS發送卡片數據。不知道這個錯誤告訴我什麼。這是我的日誌貓:Android致命異常:主要與UniMag SDK

02-28 21:30:09.740: E/AndroidRuntime(25624): FATAL EXCEPTION: main 
02-28 21:30:09.740: E/AndroidRuntime(25624): java.lang.RuntimeException: Unable to start activity ComponentInfo{.simpleswipe2/.simpleswipe2.MainActivity}: android.os.NetworkOnMainThreadException 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.app.ActivityThread.access$700(ActivityThread.java:168) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.os.Looper.loop(Looper.java:137) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.app.ActivityThread.main(ActivityThread.java:5493) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at java.lang.reflect.Method.invokeNative(Native Method) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at java.lang.reflect.Method.invoke(Method.java:525) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at dalvik.system.NativeStart.main(Native Method) 
02-28 21:30:09.740: E/AndroidRuntime(25624): Caused by: android.os.NetworkOnMainThreadException 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1144) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at com.idtechproducts.acom.uniMagURLHelper.getLastXMLVersion(uniMagURLHelper.java:22) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at com.idtechproducts.unimagsdk.UniMagConfigHelper.downloadXMLFile(UniMagConfigHelper.java:56) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at com.idtechproducts.unimagsdk.UniMagConfigHelper.loadingXMLFile(UniMagConfigHelper.java:234) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at com.idtechproducts.unimagsdk.UniMagConfigHelper.loadingXMLFile(UniMagConfigHelper.java:48) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at IDTech.MSR.uniMag.uniMagReader.loadingConfigurationXMLFile(uniMagReader.java:485) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at .simpleswipe2.MainActivity.onCreate(MainActivity.java:33) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.app.Activity.performCreate(Activity.java:5372) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
02-28 21:30:09.740: E/AndroidRuntime(25624): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270) 
02-28 21:30:09.740: E/AndroidRuntime(25624): ... 11 more 
02-28 21:33:27.505: E/AndroidRuntime(26259): FATAL EXCEPTION: main 
02-28 21:33:27.505: E/AndroidRuntime(26259): java.lang.RuntimeException: Unable to start activity ComponentInfo{.simpleswipe2/.simpleswipe2.MainActivity}: android.os.NetworkOnMainThreadException 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.app.ActivityThread.access$700(ActivityThread.java:168) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.os.Looper.loop(Looper.java:137) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.app.ActivityThread.main(ActivityThread.java:5493) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at java.lang.reflect.Method.invokeNative(Native Method) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at java.lang.reflect.Method.invoke(Method.java:525) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at dalvik.system.NativeStart.main(Native Method) 
02-28 21:33:27.505: E/AndroidRuntime(26259): Caused by: android.os.NetworkOnMainThreadException 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1144) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at com.idtechproducts.acom.uniMagURLHelper.getLastXMLVersion(uniMagURLHelper.java:22) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at com.idtechproducts.unimagsdk.UniMagConfigHelper.downloadXMLFile(UniMagConfigHelper.java:56) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at com.idtechproducts.unimagsdk.UniMagConfigHelper.loadingXMLFile(UniMagConfigHelper.java:234) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at com.idtechproducts.unimagsdk.UniMagConfigHelper.loadingXMLFile(UniMagConfigHelper.java:48) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at IDTech.MSR.uniMag.uniMagReader.loadingConfigurationXMLFile(uniMagReader.java:485) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at .simpleswipe2.MainActivity.onCreate(MainActivity.java:33) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.app.Activity.performCreate(Activity.java:5372) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
02-28 21:33:27.505: E/AndroidRuntime(26259): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270) 
02-28 21:33:27.505: E/AndroidRuntime(26259): ... 11 more 

我的Manifest.xml

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

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="18" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".simpleswipe2.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> 

我MainActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/text_view" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello_world" /> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="72dp" 
    android:text="Swipe" /> 
</RelativeLayout> 

最後,我的Java文件

package com.xxxxxxxx.simpleswipe2; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import IDTech.MSR.XMLManager.StructConfigParameters; 
import IDTech.MSR.uniMag.uniMagReader; 
import IDTech.MSR.uniMag.uniMagReaderMsg; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends Activity implements uniMagReaderMsg { 

    private uniMagReader myUniMagReader = null; 
    private Button btnSwipe; 

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

     if(myUniMagReader == null) { 
      myUniMagReader = new uniMagReader(this,this); 
      myUniMagReader.setSaveLogEnable(false); 
      myUniMagReader.setXMLFileNameWithPath(null); 
      myUniMagReader.loadingConfigurationXMLFile(true); 

      //myUniMagReader.setVerboseLoggingEnable(true); 
      myUniMagReader.registerListen(); 
     } 

     btnSwipe = (Button) findViewById(R.id.button1); 
     btnSwipe.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       myUniMagReader.startSwipeCard(); 
      } 
     }); 
    } 

    @Override 
    public void onDestroy() { 
    myUniMagReader.stopSwipeCard(); 
     myUniMagReader.unregisterListen(); 
     myUniMagReader.release(); 
     super.onDestroy(); 
    } 

    @Override 
    public boolean getUserGrant(int arg0, String arg1) { 
     Log.d("UniMag", "getUserGrant -- " + arg1); 
     return true; 
    } 

    @Override 
    public void onReceiveMsgAutoConfigProgress(int arg0) { 
     // TODO Auto-generated method stub 
     Log.d("UniMag", "onReceiveMsgAutoConfigProgress"); 
    } 

    @Override 
    public void onReceiveMsgCardData(byte arg0, byte[] arg1) { 
     Log.d("UniMag", "onReceiveMsgCardData"); 
     Log.d("UniMag", "Successful swipe!"); 

     String strData = new String(arg1); 
     Log.d("UniMag", "SWIPE - " + strData); 
     if(myUniMagReader.isSwipeCardRunning()) { 
      myUniMagReader.stopSwipeCard(); 
     } 

     // Match the data we want. 
     String pattern = "%B(\\d+)\\^([^\\^]+)\\^(\\d{4})"; 
     Log.d("UniMag", pattern); 
     Pattern r = Pattern.compile(pattern); 
     Matcher m = r.matcher(strData); 
     String card = ""; 
     String name = ""; 
     String exp = ""; 
     String data = ""; 
     if(m.find()) { 
      for(int a = 0; a < m.groupCount(); ++a) { 
       Log.d("UniMag", a + " - "+m.group(a)); 
      } 
      card = m.group(1); 
      name = m.group(2); 
      exp = m.group(3); 
      data = "Data: " + name + " -- " + card + " -- " + exp; 
      Log.d("UniMag", data); 

      Message msg = new Message(); 
      msg.obj = data; 
      swipeHandler.sendMessage(msg); 
     } 

    } 

    final Handler swipeHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      String text = (String)msg.obj; 
      TextView dataView = (TextView) findViewById(R.id.text_view); 
      dataView.setText(text); 
     } 
    }; 

    @Override 
    public void onReceiveMsgCommandResult(int arg0, byte[] arg1) { 
     Log.d("UniMag", "onReceiveMsgCommandResult"); 
    } 

    @Override 
    public void onReceiveMsgConnected() { 
     Log.d("UniMag", "onReceiveMsgConnected"); 
     Log.d("UniMag", "Card reader is connected."); 
    } 

    @Override 
    public void onReceiveMsgDisconnected() { 
     Log.d("UniMag", "onReceiveMsgDisconnected"); 
     if(myUniMagReader.isSwipeCardRunning()) { 
      myUniMagReader.stopSwipeCard(); 
     } 
     myUniMagReader.release(); 

    } 

    @Override 
    public void onReceiveMsgFailureInfo(int arg0, String arg1) { 
     Log.d("UniMag","onReceiveMsgFailureInfo -- " + arg1); 
    } 

    @Override 
    public void onReceiveMsgSDCardDFailed(String arg0) { 
     Log.d("UniMag", "onReceiveMsgSDCardDFailed -- " + arg0); 
    } 

    @Override 
    public void onReceiveMsgTimeout(String arg0) { 
     Log.d("UniMag", "onReceiveMsgTimeout -- " + arg0); 
     Log.d("UniMag","Timed out!"); 
    } 

    @Override 
    public void onReceiveMsgToConnect() { 
     Log.d("UniMag","Swiper Powered Up"); 
    } 

    @Override 
    public void onReceiveMsgToSwipeCard() { 
     Log.d("UniMag","onReceiveMsgToSwipeCard");  
    } 

    @Override 
    public void onReceiveMsgAutoConfigCompleted(StructConfigParameters arg0) { 
     Log.d("UniMag", "onReceiveMsgAutoConfigCompleted"); 
    } 

    @Override 
    public void onReceiveMsgAutoConfigProgress(int arg0, double arg1, 
      String arg2) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onReceiveMsgProcessingCardData() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onReceiveMsgToCalibrateReader() { 
     // TODO Auto-generated method stub 

    } 
} 

回答

2

你正在做在主UI線程上進行網絡操作。在這條線 - 當應用程序試圖在其主線程進行聯網操作

myUniMagReader.loadingConfigurationXMLFile(true); 

NetworkOnMainThreadException拋出異常。請參閱here

您可以使用AsyncTask在不同的線程上運行此任務。

+0

就是這樣。我能夠使用AsyncTask解決它。謝謝。 –