我有一个我正在研究的Android应用程序,我已经有了代码正常工作我只是想通过将某些功能移动到单独的文件中来清理它。每当我尝试从一个单独的文件调用其中一个函数时,它崩溃说FATAL EXCEPTION:AsyncTask#5。我在单独的文件中创建了一个构造函数,我认为我正在做正确的但我猜不是。任何帮助表示赞赏。
这是我的代码:
DatabaseManager database;
public class loginTask extends AsyncTask<String, String, String> {
//check if server is online
protected String doInBackground(String... params) {
Log.d("test", "1");
String username = params[0];
String password = params[1];
URI absolute = null;
Log.d("test", "2");
try {
Log.d("test", "3");
absolute = new URI("http://link.com/webservice/");
} catch (URISyntaxException e) {
Log.d("test", "4");
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("test", "5");
database.test();//crashes at this line
return postHttpResponse(absolute,username,password);
}
//set status bar to offline if flag is false
protected void onPostExecute(String jsonstring) {
try {
//get values from jsonobject
JSONObject jsonobj=new JSONObject(jsonstring);
checkResponse(jsonobj);
//errorMessage.setText(checkResponse(jsonobj));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
DatabaseManager.java
private final String LOGIN_TAG = "Login";
public DatabaseManager(){
}
public void test(){
Log.d(LOGIN_TAG, "this is a test");
}
答案 0 :(得分:3)
您永远不会实例化DatabaseManager
- 所以它始终保持null
。类范围的引用保留null
,直到它们被引用(通过将新引用指向现有引用或通过创建新对象)
考虑做
database = new DatabaseManager();
Log.d("test", "5");
database.test();//shouldn't crash at this line now