2015-01-11 184 views
-2

我正在使用android studio和名爲myCBR的外部庫。我正在嘗試加載放置在我的資產文件夾中的文件。我有主要活動稱爲:「MainActivity」和「CBRHandler」。我可以運行應用程序,但是當我嘗試通過切換按鈕加載項目時,我的應用程序崩潰。你有什麼想法可能會導致它嗎? This is the structure of my project where only CBRHandler class and MainActivity class contains code the rest are empty activities我的應用程序不斷崩潰

public class MainActivity extends Activity { 

Boolean InternetAvailable = false; 
Button checkInternet; 
DetectConnection detect_connection; 
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10L; 
private static final long MIN_TIME_PASSED_FOR_UPDATES = 10000L; 
private static final String PRJ_FILENAME = "financeDemo.prj"; 
private static final String PROJECTNAME = "financeDemo"; 
final String TAG = "[HUB]"; 
protected CBRHandler cbrHandler = null; 
private AsyncTask<String, Integer, String> cbrTask; 
protected HashMap<String, String> currentLocales; 
protected Location currentLocation; 
protected ProgressDialog dialog; 
protected LocationManager locManager; 
protected Button locationButton; 
protected String locationlatitude; 
protected String locationlongitude; 
protected TextView myCBRtext; 
protected ToggleButton myCBRtoggleButton; 
protected Button networkButton; 
protected TextView networkText; 
protected Button socialProfileButton; 
protected TextView socialText; 
protected Button startQueryButton; 
protected Button userDetailsButton; 


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

    //Setting up button for "My Librarian" section 
    Button MyLibrarian = (Button) findViewById(R.id.btnMyLibrarian); 
    MyLibrarian.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, MyLibrarianActivity.class)); 
     } 
    }); 

    //Setting up button for "Around Me" section 
    Button AroundMe = (Button) findViewById(R.id.btnAroundMe); 
    AroundMe.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, AroundMeActivity.class)); 
     } 
    }); 

    //Setting up button for "Find your way" section 
    Button FindYourWay = (Button) findViewById(R.id.btnFindYourWay); 
    FindYourWay.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, FindYourWayActivity.class)); 
     } 
    }); 

    //Setting up button for "Author" section 
    Button Author = (Button) findViewById(R.id.btnAuthor); 
    Author.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, AuthorActivity.class)); 
     } 
    }); 

    //Setting up "Check for network connectivity button" 
    checkInternet = (Button) findViewById(R.id.btnNetworkConnectivity); 
    detect_connection = new DetectConnection(getApplicationContext()); 
    checkInternet.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      InternetAvailable = detect_connection.InternetConnecting(); 
      if (InternetAvailable) { 
       showAlertDialog(MainActivity.this, "Network Connection", 
         "Network connection is available", true); 
      } else { 
       showAlertDialog(MainActivity.this, "No Network Connection", 
         "Network connection is not available", false); 
      } 
     } 
    }); 
    { 


     this.myCBRtoggleButton = ((ToggleButton) findViewById(R.id.myCBRtoggleButton)); 
     this.myCBRtoggleButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View paramAnonymousView) { 
       if (MainActivity.this.myCBRtoggleButton.isChecked()) { 
        Toast.makeText(MainActivity.this, "Starting a myCBR task", Toast.LENGTH_SHORT).show(); 
        MainActivity.this.cbrTask = new MainActivity.OpenMyCBRProjectTask(MainActivity.this).execute(new String[0]); 
        return; 
       } 
       Toast.makeText(MainActivity.this, "Resetting", Toast.LENGTH_SHORT).show(); 
       MainActivity.this.cbrTask.cancel(true); 
       MainActivity.this.startQueryButton.setEnabled(false); 
       CBRHandler.resetInstance(); 
      } 
     }); 
     this.startQueryButton = ((Button) findViewById(R.id.startQueryButton)); 
     this.startQueryButton.setEnabled(false); 
     this.startQueryButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View paramAnonymousView) { 
       Intent localIntent = new Intent(MainActivity.this, MyLibrarianActivity.class); 
       MainActivity.this.startActivity(localIntent); 
      } 
     }); 


     FileIO.copyAssetFile(this, getResources(), "libraryDemo.prj"); 
     return; 
    } 
} 


class OpenMyCBRProjectTask extends AsyncTask<String, Integer, String> { 
    OpenMyCBRProjectTask() { 
    } 

    public OpenMyCBRProjectTask(MainActivity mainActivity) { 

    } 

    protected String doInBackground(String[] paramArrayOfString) { 
     MainActivity.this.cbrHandler = CBRHandler.getInstance(); 
     try { 
      MainActivity.this.cbrHandler.createProjectFromPRJ("libraryDemo", "libraryDemo.prj", "data/data/" + MainActivity.this.getPackageName() + "/files/"); 
      return "Opening project 'libraryDemo'"; 
     } catch (Exception localException) { 
      Log.e("[HUB]", "Exception caught while trying to call createProjectFromPRJ"); 
      Log.e("[HUB]", localException.toString()); 
     } 
     return "Failed to open project"; 
    } 

    protected void onPostExecute(String paramString) { 
     MainActivity.this.myCBRtext.setText("Project: 'libraryDemo'"); 
     MainActivity.this.startQueryButton.setEnabled(true); 
    } 

    protected void onProgressUpdate(Integer[] paramArrayOfInteger) { 
     super.onProgressUpdate(paramArrayOfInteger); 
    } 
} 

public void showAlertDialog(Context context, String t, String m, Boolean status) { 
    AlertDialog message = new AlertDialog.Builder(context).create(); 
    message.setTitle(t); 
    message.setMessage(m); 
    message.setButton("OK", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
     } 
    }); 
    message.show(); 
} 

}

而且我CBRHandler活動

public class CBRHandler 

{

private static CBRHandler singletonInstance; 
private final String TAG = "[CBR]"; 
private Concept concept = null; 
private String conceptName = "Resource"; 
private DefaultCaseBase ResourcesCB; 
private String multiplevalueseparator = ","; 
private String prjFileName = ""; 
private Project project = null; 
private LinkedHashMap<String, String> queryAttributes = new LinkedHashMap(); 


public static CBRHandler getInstance() 
{ 
    if (singletonInstance == null) 
     singletonInstance = new CBRHandler(); 
    return singletonInstance; 
} 

public static void resetInstance() 
{ 
    singletonInstance = null; 
} 


public void addQueryAttribute(String paramString1, String paramString2) 
{ 
    if (this.queryAttributes.containsKey(paramString1)) 
     this.queryAttributes.remove(paramString1); 
    this.queryAttributes.put(paramString1, paramString2); 
} 

public void createProjectFromPRJ(String paramString1, String paramString2, String paramString3) 
{ 
    try 
    { 
     Log.i("[CBR]", "Assigning project: " + paramString3 + paramString2); 
     this.project = new Project(paramString3 + paramString2); 
     Log.i("[CBR]", "Assigning concept: " + this.conceptName); 
     this.concept = this.project.getConceptByID(this.conceptName); 
     return; 
    } 
    catch (Exception localException) 
    { 
     Log.e("[CBR]", "Failed to create project from .prj"); 
     Log.e("[CBR]", localException.toString()); 
    } 
} 

public boolean hasProject() 
{ 
    return this.project != null; 
} 

}

的例外,我得到的是在這裏:

1162-1162/dyankov.mylibraryrecommender E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.NullPointerException 
     at dyankov.mylibraryrecommender.MainActivities.MainActivity$OpenMyCBRProjectTask.onPostExecute(MainActivity.java:245) 
     at dyankov.mylibraryrecommender.MainActivities.MainActivity$OpenMyCBRProjectTask.onPostExecute(MainActivity.java:217)  
+0

當您的應用程序崩潰時,會得到什麼異常?請編輯您的問題並添加此信息。 – Robert

+0

@Robert請看看我更新的帖子。謝謝 –

回答

2

在你的AsyncTask的onPostExecute方法,你這樣做:

protected void onPostExecute(String paramString) { 
     MainActivity.this.myCBRtext.setText("Project: 'libraryDemo'"); 
     MainActivity.this.startQueryButton.setEnabled(true); 
} 

你永遠不正確初始化myCBRtext。您可以在onCreate中執行此操作:

@Override 
protected void onCreate(Bundle paramBundle) { 
    super.onCreate(paramBundle); 
    setContentView(R.layout.activity_main); 
    // Add the following 
    this.myCBRtext = (TextView) findViewById(R.id.my_cbr_text); 
    .... 
}