Search code examples
javaandroidhwpf

How to avoid force close when read null value


I write simple android application to read document properties with Apache.POI, but when it try to read document with null properties it will force close..

for example I use getDocumentSummaryInformation() then use getCompany().. but when the document properties doesn't have any value in field Company then it will force closed.

How to handle this problem? Sorry for my poor english and thank you for your attention.

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import org.apache.poi.poifs.filesystem.*;
import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hwpf.*;
import java.io.*;

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getInit();

        cata = "";
        compa = "";

        readMyDocument(fileName);

        try {

                category.setText(cata);
            company.setText(compa);

        } catch (Exception e) {

            category.setText("Unknown Category");
            company.setText("Unknown Company");

        }

}



String fileName = "/sdcard/Test.doc";
public static String cata, compa;

public static void readMyDocument(String fileName){
    POIFSFileSystem fs = null;


    try {
        fs = new POIFSFileSystem(new FileInputStream(fileName));
        HWPFDocument doc = new HWPFDocument(fs);

        /** Read the document summary**/
        readDocumentSummary(doc);

    } catch (Exception e) {
        e.printStackTrace();

    }       
}   



public static MainActivity readDocumentSummary(HWPFDocument doc) {
    DocumentSummaryInformation summaryInfo=doc.getDocumentSummaryInformation();
    SummaryInformation summaryInfo2=doc.getSummaryInformation();

    MainActivity adata = new MainActivity();

        try{
        String category = summaryInfo2.getAuthor();
        adata.cata = category;
        }catch (Exception e) {
            Log.e("MainActivity", "Error occurred!, Error = "+e.toString());

        }

        try{
            String company = summaryInfo.getCompany();
            adata.compa = company;
            }catch (Exception e) {
            Log.e("MainActivity", "Error occurred!, Error = "+e.toString());

            }

    return adata;


}

TextView category;
TextView company;

public void getInit() {

    category = (TextView) findViewById(R.id.category);
    company = (TextView) findViewById(R.id.company);

}
}

Log:

FATAL EXCEPTION: main
java.lang.NoSuchFieldError: org.apache.poi.hwpf.HWPFDocument.filesystem
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:218)
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:158)
at com.ajs.metaxdc.MainActivity.readMyDocument(MainActivity.java:155)
at com.ajs.metaxdc.MainActivity.onCreate(MainActivity.java:87)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
at dalvik.system.NativeStart.main(Native Method)
Force finishing activity com.ajs.metaxdc/.MainActivity

Solution

  • I just leave hwpf function and use hpsf instead.. Because no one can help find solution to null value in hwpf property field. Thank you for all people who tried to help me