2017-05-29 45 views
1

我試圖在掃描後得到字符串中的結果值。 但它不會工作。Android ZXING條碼掃描器將結果值放入字符串

我已經想通了,如何把它一起舉杯(maketext)的作品,但一個字符串,我不能弄明白。 這裏的代碼請幫助我。

 cpackage com.example.stage.absa; 

import android.Manifest; 
import android.content.ClipData; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.google.zxing.Result; 
import java.io.IOException; 
import me.dm7.barcodescanner.zxing.ZXingScannerView; 
import okhttp3.Call; 
import okhttp3.Callback; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.Response; 
import android.net.Uri; 
import java.net.URL; 

public class MainActivity extends AbsRuntimePermission { 

    String resultCode; 
    private Button getBtn; 
    private TextView result; 
    private OkHttpClient client; 
    boolean doubleTap = false; 
    private ZXingScannerView scannerView; 
    private static final int REQUEST_PERMISSION = 10; 
    Toolbar toolbar; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     result = (TextView) findViewById(R.id.result); 
     getBtn = (Button) findViewById(R.id.getBtn); 
     getBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       getWebService(); 
      } 
     }); 
     client = new OkHttpClient(); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     requestAppPermissions(new String[]{ 
         Manifest.permission.CAMERA}, 
       R.string.msg, REQUEST_PERMISSION); 
    } 

    @Override 
    public void onBackPressed() { 
     if (doubleTap) { 
      super.onBackPressed(); 
     } else { 
      Toast.makeText(this, "Druk Terug opnieuw om de app te sluiten", Toast.LENGTH_SHORT).show(); 
      doubleTap = true; 
      Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        doubleTap = false; 
       } 
      }, 500); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 

     if (id == R.id.action_settings) { 
      startActivity(new Intent(this, SettingsActivity.class)); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    public void browser1(View view) { 
     Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.suppliance.nl/")); 
     startActivity(browserIntent); 
    } 

    public void scanCode(View view) { 
     scannerView = new ZXingScannerView(this); 
     scannerView.setResultHandler(new ZxingScannerResultHandler()); 

     setContentView(scannerView); 
     scannerView.startCamera(); 
    } 

    class ZxingScannerResultHandler implements ZXingScannerView.ResultHandler { 
     @Override 
     public void handleResult(Result result) { 
      // String resultCode = result.getText(); 
      // Toast.makeText(MainActivity.this, resultCode, Toast.LENGTH_SHORT).show(); 
      resultCode = result.getText(); 
      setContentView(R.layout.activity_main); 
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 
      scannerView.stopCamera(); 
     } 
    } 



    private void getWebService() { 

     Uri.Builder builder = new Uri.Builder(); 
     builder.scheme("http") 
       .appendPath(getString(R.string.ipadres)) 
       .appendPath(getString(R.string.poort)) 
       .authority("barcode/") 
       .appendPath(getString(R.id.)) 
     String URL = builder.build().toString(); 

     final Request request = new Request.Builder().url("http://192.168.17.12:9083/barcode/8712345501006").build(); 
     client.newCall(request).enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         result.setText("Mislukt"); 
        } 
       }); 
      } 

      @Override 
      public void onResponse(Call call, final Response response) { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          result.setText(response.body().string()); 
         } catch (IOException ioe) { 
          result.setText("Error tijdens verkrijgen body"); 
         } 
        } 
       }); 
      } 
     }); 
    } 

    @Override 
    public void onPermissionsGranted(int requestCode) { 
     //Do anything when permisson granted 
     Toast.makeText(getApplicationContext(), "Toegang geaccepteerd", Toast.LENGTH_LONG).show(); 
    } 
} 
+0

這是代碼的工作與否?因爲你用Strings和Toast發佈了一些東西......? –

+0

是的這段代碼的工作原理,但我沒有得到它,因爲我已經decleared變量沒有我嗎?我只是不能在mainactivity文件中進一步使用它是我想要做的 – Merijn

+0

如果你想在其他部分使用它,你需要在類級聲明屬性'String resultCode',而不是在handleResult方法內部(爲了簡單起見,你應該把這個匿名類放在你的MainActivity中) – MatPag

回答

1

刪除字符串聲明,而是其移動作爲一個類成員

public void handleResult(Result result) { 
      //String resultCode = result.getText(); 
      resultCode = result.getText(); 

,如:

myClass extends Activity... { 
     String resultCode; 
} 

現在你可以在hadnleResult回調分配結果代碼並且使用它每當你需要它時,同樣的活動!


編輯:

你有一個內部類,我會擺脫這一點,直接實現ZXingScannerView.ResultHandler接口:

例如:

public class MainActivity extends AbsRuntimePermission implements ZXingScannerView.ResultHandler{ 

    private String resultCode; 
    private Button getBtn; 
    private TextView result; 
    private OkHttpClient client; 
    boolean doubleTap = false; 
    private ZXingScannerView scannerView; 
    private static final int REQUEST_PERMISSION = 10; 
    Toolbar toolbar; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     result = (TextView) findViewById(R.id.result); 
     getBtn = (Button) findViewById(R.id.getBtn); 
     getBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       getWebService(); 
      } 
     }); 
     client = new OkHttpClient(); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     requestAppPermissions(new String[]{ 
         Manifest.permission.CAMERA}, 
       R.string.msg, REQUEST_PERMISSION); 
    } 

    @Override 
    public void onBackPressed() { 
     if (doubleTap) { 
      super.onBackPressed(); 
     } else { 
      Toast.makeText(this, "Druk Terug opnieuw om de app te sluiten", Toast.LENGTH_SHORT).show(); 
      doubleTap = true; 
      Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        doubleTap = false; 
       } 
      }, 500); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 

     if (id == R.id.action_settings) { 
      startActivity(new Intent(this, SettingsActivity.class)); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    public void browser1(View view) { 
     Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.suppliance.nl/")); 
     startActivity(browserIntent); 
    } 

    public void scanCode(View view) { 
     scannerView = new ZXingScannerView(this); 
     //scannerView.setResultHandler(new ZxingScannerResultHandler()); 
     scannerView.setResultHandler(this); 

     setContentView(scannerView); 
     scannerView.startCamera(); 
    } 

    //class ZxingScannerResultHandler implements ZXingScannerView.ResultHandler { 
     @Override 
     public void handleResult(Result result) { 
      // String resultCode = result.getText(); 
      // Toast.makeText(MainActivity.this, resultCode, Toast.LENGTH_SHORT).show(); 
      resultCode = result.getText(); 
      setContentView(R.layout.activity_main); 
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 
      scannerView.stopCamera(); 
     } 
    //} 



    private void getWebService() { 

     Uri.Builder builder = new Uri.Builder(); 
     builder.scheme("http") 
       .appendPath(getString(R.string.ipadres)) 
       .appendPath(getString(R.string.poort)) 
       .authority("barcode/") 
       .appendPath(getString(R.id.)) 
     String URL = builder.build().toString(); 

     final Request request = new Request.Builder().url("http://192.168.17.12:9083/barcode/8712345501006").build(); 
     client.newCall(request).enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         result.setText("Mislukt"); 
        } 
       }); 
      } 

      @Override 
      public void onResponse(Call call, final Response response) { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          result.setText(response.body().string()); 
         } catch (IOException ioe) { 
          result.setText("Error tijdens verkrijgen body"); 
         } 
        } 
       }); 
      } 
     }); 
    } 

    @Override 
    public void onPermissionsGranted(int requestCode) { 
     //Do anything when permisson granted 
     Toast.makeText(getApplicationContext(), "Toegang geaccepteerd", Toast.LENGTH_LONG).show(); 
    } 
} 
+0

PLS但它仍然沒有工作,爲什麼? – Merijn

+0

然後發佈洞課......我們不能通過猜測你寫的東西來幫助你! –

+0

剛剛貼出了code頂部 – Merijn

0

我將與此去或類似的東西,這取決於你如何處理掃描儀視圖

public class MainActivity extends AppCompatActivity 
        implements ZXingScannerView.ResultHandler { 

    private ZXingScannerView mScannerView; 
    private String resultCode; 

    @Override 
    public void onCreate(Bundle state) { 
     super.onCreate(state); 
     mScannerView = new ZXingScannerView(this); // Programmatically initialize the scanner view 
     setContentView(mScannerView);    // Set the scanner view as the content view 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results. 
     mScannerView.startCamera();   // Start camera on resume 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     mScannerView.stopCamera();   // Stop camera on pause 
    } 

    @Override 
    public void handleResult(Result rawResult) { 
     resultCode = rawResult.getText(); 
     //now use resultCode 
    } 
}