Jarobe Bernardo
Jarobe Bernardo

Reputation: 75

Error when calling Microsoft ProjectOxford Vision API

I am new in Android and I am trying to develop an Android app. I looked for a tutorial in youtube. I follow every step in Android tutorial on youtube Analyze image. But since I am a beginner in developing Android apps I encountered error while running the app, it automatically stopped.

can someone willing to help.

here's my code

public class MainActivity extends AppCompatActivity {

public VisionServiceClient visionServiceClient = new VisionServiceRestClient("96a818770f0e45dfa09fc5cce0f1ce1e");

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

    Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.apple);
    ImageView imageView = (ImageView)findViewById(R.id.imageView);
    Button btnIdentify = (Button)findViewById(R.id.btnIdentify);

    imageView.setImageBitmap(mBitmap);

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    mBitmap.compress(Bitmap.CompressFormat.JPEG, 100,outputStream);
    final ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());

    btnIdentify.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v){
           final AsyncTask<InputStream,String,String> visionTask = new AsyncTask<InputStream, String, String>() {
                ProgressDialog mDialog = new ProgressDialog(MainActivity.this);

                @Override
                protected String doInBackground(InputStream... params) {
                    try {
                        publishProgress("Recognizing...");
                        String[] features = {"Description"};
                        String[] details = {};

                        AnalysisResult result = visionServiceClient.analyzeImage(params[0], features, details);

                        String strResult = new Gson().toJson(result);
                        return strResult;
                    } catch (Exception e) {
                       return  null;
                    }
                }

                @Override
                protected void onPreExecute() {
                    mDialog.show();
                }

                @Override
                protected void onPostExecute(String s) {
                    mDialog.dismiss();

                    AnalysisResult result = new Gson().fromJson(s,AnalysisResult.class);
                    TextView textView = (TextView)findViewById(R.id.txtDescription);
                    StringBuilder stringBuilder = new StringBuilder();
                    for(Caption caption:result.description.captions)
                    {
                        stringBuilder.append(caption.text);
                    }
                    textView.setText(stringBuilder);
                }

                @Override
                protected void onProgressUpdate(String... values) {
                    mDialog.setMessage(values[0]);
                }
            };

            visionTask.execute(inputStream);
        }
    });

}

here's my error encounterd

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.dev.sample, PID: 455
              java.lang.NullPointerException: Attempt to read from field 'com.microsoft.projectoxford.vision.contract.Description com.microsoft.projectoxford.vision.contract.AnalysisResult.description' on a null object reference
                  at com.dev.sample.MainActivity$1$1.onPostExecute(MainActivity.java:81)
                  at com.dev.sample.MainActivity$1$1.onPostExecute(MainActivity.java:50)
                  at android.os.AsyncTask.finish(AsyncTask.java:651)
                  at android.os.AsyncTask.access$500(AsyncTask.java:180)
                  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:7325)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

Upvotes: 1

Views: 487

Answers (1)

Maria Ines Parnisari
Maria Ines Parnisari

Reputation: 17496

That error means that the API call failed and you're trying to parse a null json.

Change your code to this:

@Override
protected String doInBackground(InputStream...params) {
  try {
    publishProgress("Recognizing...");
    String[] features = {
      "Description"
    };
    String[] details = {};

    AnalysisResult result = visionServiceClient.analyzeImage(params[0], features, details);

    String strResult = new Gson().toJson(result);
    return strResult;
  } catch (Exception e) {
    return e.getMessage();
  }
}

@Override
protected void onPostExecute(String s) {
  mDialog.dismiss();
  StringBuilder stringBuilder = new StringBuilder();
  TextView textView = findViewById(R.id.txtDescription);
  try {
    AnalysisResult result = new Gson().fromJson(s, AnalysisResult.class);
    for (Caption caption: result.description.captions) {
      stringBuilder.append(caption.text);
    }
  } catch (Exception e) {
    stringBuilder.append(e.getCause());
  }
  textView.setText(stringBuilder);
}

Upvotes: 0

Related Questions