Reputation: 75
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
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