2013-05-29 80 views
0

Android 2.3.3使用ZXing庫編碼URL

我想使用ZXing庫編碼一個簡單的URL。

我只需要在下面的文件中編碼URL字段(id = edittext_url_link)。

數據輸入的字段 - >URL Title = My Website. URL = http://www.mywebsite.com

XML文件:::

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="300dp" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dp" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textview_url_header" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Enter URL to Encode:" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" /> 

    <TextView 
     android:id="@+id/textview_url_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="3dp" 
     android:layout_marginTop="20dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:text="URL Title" /> 

    <EditText 
     android:id="@+id/edittext_url_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:ems="10" > 
    </EditText> 

    <TextView 
     android:id="@+id/textview_url_link" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="3dp" 
     android:layout_marginTop="20dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:text="URL" /> 

    <EditText 
     android:id="@+id/edittext_url_link" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:ems="10" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="3dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:layout_marginTop="20dp" 
     android:layout_gravity="center" 
     android:gravity="center" > 

     <Button 
      android:id="@+id/button_url_encode" 
      android:layout_width="0dip" 
      android:layout_height="60dp" 
      android:layout_weight="0.50" 
      android:text="Encode" 
      android:layout_gravity="center" 
      android:gravity="center" /> 

     <Button 
      android:id="@+id/button_url_cancel" 
      android:layout_width="0dip" 
      android:layout_height="60dp" 
      android:layout_weight="0.50" 
      android:text="Cancel" 
      android:layout_gravity="center" 
      android:gravity="center" /> 
    </LinearLayout> 

</LinearLayout> 

Java文件:::

public class URLEncodeActivity extends Activity implements OnClickListener{ 

    EditText edtxtURLTitle, edtxtURL; 
    Button btnEncode, btnCancel; 

    String urlTitle, url; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_url); 

     edtxtURLTitle = (EditText) findViewById(R.id.edittext_url_title); 
     edtxtURL = (EditText) findViewById(R.id.edittext_url_link); 
     btnEncode = (Button) findViewById(R.id.button_url_encode); 
     btnCancel = (Button) findViewById(R.id.button_url_cancel); 


     urlTitle = edtxtURLTitle.getText().toString(); 
     url = edtxtURL.getText().toString(); 

     btnEncode.setOnClickListener(this); 
     btnCancel.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     if(v.getId() == R.id.button_url_encode) 
     { 
      Intent intent = new Intent(Intents.Encode.ACTION); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
      intent.putExtra(Intents.Encode.TYPE, Contents.Type.TEXT); 
      intent.putExtra(Intents.Encode.DATA, url); 
      intent.putExtra(Intents.Encode.FORMAT, BarcodeFormat.QR_CODE.toString()); 
      startActivity(intent); 

     } 
     else 
     { 

     } 

    } 

} 

不過,我不斷收到一個對話的說法,「無法從提供的數據中編碼條形碼「。我做錯了什麼?


[編輯]

對於未來的參考,但不建議導入斑馬線庫代碼到您的項目,我做到了,這裏是我的URL獲得的呼籲編碼。

  Intent intent = new Intent(
        "com.xxx.xx.android.ENCODE"); 
      String data = edtxtURL.getText().toString(); 
      intent.putExtra(Const.FROM_ACTIVITY, "URL"); 
      intent.putExtra("ENCODE_DATA", data); 
      intent.putExtra("ENCODE_TYPE", Contents.Type.TEXT); 
      intent.putExtra("ENCODE_FORMAT", 
        BarcodeFormat.QR_CODE.toString()); 
      startActivity(intent); 
+0

@瓦米斯查拉你解決了你的問題? – Erum

+0

@ErumHannan,我將庫代碼導入到我的項目中,並使用上面的代碼(在編輯部分)完成我的工作。 –

+0

你可以來http://chat.stackoverflow.com/rooms/19132/java-and-android-era編碼問題 – Erum

回答

0

不要嘗試這個自己編寫,而是使用IntentIntegrator.shareText()https://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java

有可能在這裏使用標準庫調用避免了一些小問題。

如果我不得不猜測超出這一點,我猜測該URL實際上並沒有「http://」或有一個額外的空間或其他東西。

+0

但代碼似乎很清楚,數據是好的。在嘗試對電子郵件地址,電話號碼和其他普通事物進行編碼時,我遇到了同樣的錯誤。這個信息,給你一個想法發生了什麼? –

+0

上述評論中的小修改。上述(正在討論的方法)正在處理電話號碼和文本。但它給電子郵件和URL帶來了錯誤。 –

+0

我沒有看到URL的問題。嘗試在條碼掃描器中共享書籤,或嘗試使用ZXing Test。對於電子郵件,我認爲該類型需要是「EMAIL_TYPE」 –