2017-11-03 5 views
-1

QRコードがURLであることに気付くことができるQRコードアプリケーションに取り組んでいます。電話のWebブラウザで検索してください(または、ハイパーリンクをクリックしてクリックする必要があります)。このエラーが発生しました:仮想メソッド 'null android.widget.TextView.setText(java.lang.CharSequence)' nullオブジェクトリファレンス

Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

アイデアをお持ちですか?

package com.varvet.barcodereadersample; 

import android.content.Intent; 
import android.graphics.Point; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import com.google.android.gms.common.api.CommonStatusCodes; 
import com.google.android.gms.vision.barcode.Barcode; 
import com.varvet.barcodereadersample.barcode.BarcodeCaptureActivity; 

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 

public class MainActivity extends AppCompatActivity { 
    private static final String LOG_TAG = MainActivity.class.getSimpleName(); 
    private static final int BARCODE_READER_REQUEST_CODE = 1; 

    private TextView mResultTextView; 

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

     mResultTextView = (TextView) findViewById(R.id.text); 

     Button scanBarcodeButton = (Button) findViewById(R.id.scan_barcode_button); 
     scanBarcodeButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(getApplicationContext(), BarcodeCaptureActivity.class); 
       startActivityForResult(intent, BARCODE_READER_REQUEST_CODE); 
      } 
     }); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == BARCODE_READER_REQUEST_CODE) { 
      if (resultCode == CommonStatusCodes.SUCCESS) { 
       if (data != null) { 
        Barcode barcode = data.getParcelableExtra(BarcodeCaptureActivity.BarcodeObject); 
        Point[] p = barcode.cornerPoints; 

        mResultTextView.setText(barcode.displayValue); 
        try{ 
         URL url = new URL ("" + mResultTextView.getText()); 
         URLConnection conn = url.openConnection(); 
         conn.connect(); 
        } catch (MalformedURLException e) { 
         mResultTextView.setText("invalid url"); 
        } catch (IOException e) { 
         mResultTextView.setText("no connection to url placed"); 
        } 
       } else mResultTextView.setText(R.string.no_barcode_captured); 
      } else Log.e(LOG_TAG, String.format(getString(R.string.barcode_error_format), 
        CommonStatusCodes.getStatusCodeString(resultCode))); 
     } else super.onActivityResult(requestCode, resultCode, data); 
    } 
} 
+0

javacript is java –

+0

明らかに、 'activity_main'レイアウトに' text 'というIDを持つ ''はありません。 –

+0

@MikeM。ただそれを追加しました。でも、同じ問題です。 –

答えて

0

あなたはそれが文字列リソースORあなたがどこかにnullを渡していると仮定します方法にintを渡している。

setText(CharSequence); 

または

setText(int_resource_like_R.string.something); 


H EREは何をすべきかです:

まずチェックStringがnullではないか、このように自分自身を空とします。そして、もしブロック内であなたがそれには2つの選択肢を持っていない場合は

if(!TextUtils.isEmpty(String.valueOf(barcode.displayValue))){ 

} 

何方法が考えていることはあなたがそう二つの方法でそれを変更R.string.somethingのような文字列リソースを渡しているということである:これはStringを連結します

mResultTextView.setText(""+barcode.displayValue); 



第一とそれが作るだろうint Javaでは自動的に文字列を返します。もう一つの方法は次のとおりです。

第二

mResultTextView.setText(String.valueOf(barcode.displayValue)); 

これはStringにあなたのint型に変換してからテキストを表示します。

+0

試してみましたが、最初と2番目の両方で同じクラッシュと同じエラーが発生しました.. によって引き起こされる:java.lang.NullPointerException:仮想メソッド 'void android.widget.TextView.setText(java.lang。 CharSequence) 'nullオブジェクトの参照 –

+0

まだそれを把握することはできません:( –

0

あなたの問題

method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

そして、あなたのbarcode.displayValueの種類がStringではない場合、あなたはStringにそれを解析する必要があります。 @マイクM.さんのコメントよる

if(!TextUtils.isEmpty(String.valueOf(barcode.displayValue))){ 
    mResultTextView.setText(String.valueOf(barcode.displayValue)); 
} 

編集。

xmlコードにR.id.textがありますか?

を確認してください。

mResultTextView = (TextView) findViewById(R.id.text); 

サンプル

<TextView 
    android:id="@+id/text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

は、あなたがandroid:id="@+id/text"を持っていますか?

関連する問題

 関連する問題