2017-05-29 153 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 
    } 
}