1

私が取り組んでいる Android アプリケーションがあり、コードが機能しています。特定の機能を別のファイルに移動して、コードを少しクリーンアップしようとしています。ただし、別のファイルから関数の 1 つを呼び出そうとすると、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");
}
4

1 に答える 1

3

インスタンス化することはありませんDatabaseManager-したがってnull、ずっと残ります。クラス スコープの参照は、参照nullする何かが与えられるまで (既存の参照への新しい参照を指すか、新しいオブジェクトを作成することによって)残ります。

することを検討してください

database = new DatabaseManager();
Log.d("test", "5");
database.test();//shouldn't crash at this line now
于 2013-01-29T04:09:47.617 に答える