0

私はアンドロイド開発に慣れていないので、プロジェクトで問題が発生しました。コードは..

webservice コードを処理するために、次のように main.java ファイルから webinterface クラスを呼び出しています。

Main.java

      @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);
WebServiceInterface webinterface=   new WebServiceInterface();
submit.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            getuser = username.getText().toString();
            getpass = password.getText().toString();

            HashMap<String, Object> map =  new HashMap<String,Object>();
            map.put("username", getuser);
            map.put("password", getpass);
            webinterface.sendRequest(map);
        }
    });

Webinterface クラスでは、次のマップ値を受け取り、それらを文字列に変換し、RestClient.class に送信して Web サービス要求を処理しています。

WebServiceInterface.java

    ArrayList<String> ast = new ArrayList<String>();
  Collection<Object> strings = map.values();
    Iterator iterator = strings.iterator();
    while (iterator.hasNext()) {
        getuser = (String) iterator.next();
        ast.add(getuser);
    }

    String password = ast.get(0).toString();
    String username = ast.get(1).toString();

    RestClient client = new RestClient(
            "***********************");
    client.AddParam("username", username);
    client.AddParam("password", password);

    try {
        client.Execute(RequestMethod.POST);
    } catch (Exception e) {
        e.printStackTrace();
    }

      String response = client.getResponse();

     /** here getting response & sending that response back to Main.java class**/

       Main main = new Main();
   main.responseData(responsedata);

ここでは、インターフェースクラスから応答メソッドを受け取った後、次のプロセスが Main.java クラスで行われています

Main.java

     @Override
public void onCreate(Bundle savedInstanceState) {

      System.out.println("response is----^^^^^^^^^^====>>>>>>    " + getrespstatus + "_______---->>   > " + respdoctorID);
       }//end of oncreate...

  public void responseData(HashMap<String, Object> responsedata) {
    // TODO Auto-generated method stub

    System.out.println("response data in main class->>>>>>>>  "  + responsedata);

    Collection<Object> strings = responsedata.values();
    Iterator iterator = strings.iterator();
    while (iterator.hasNext()) {
        getresponse = (String) iterator.next();
        ast.add(getresponse);
    }

    String status = ast.get(0).toString();

    try {
        JSONObject json = new JSONObject(status);
        getrespstatus = json.getString("status");
        respdoctorID = json.getString("doctorID");
        callmethod(getrespstatus, respdoctorID);
        System.out.println("response is----^^^^^^^^^^====>>>>>>    " + getrespstatus + "_______---->>   > " + respdoctorID);
                /* if(getrespstatus == "true")
                  {
                   startActivity(new Intent(Main.this,Second.class)) 
                  }else 
                  {
                    //some alert message
                   }*/
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

ここで response status== true の場合、アクティビティを開始したい。しかし、ここでヌルポインター例外としてエラーが発生しています..そして、私の他の疑問は、ここで応答とdoctorIDを取得していることです。oncreate メソッドで次の値にアクセスしようとすると、null 値として表示されます (単純に言えば、ログに応答値を出力している場合、responseData メソッドで、oncreate から出力して null 値を取得している場合)。これで私を助けて...

4

1 に答える 1

2

に電話する必要がありsuperますonCreate。アクティビティのライフサイクルに関するこの記事を読むことを強くお勧めします。

応答を返す場合、最も簡単な方法は、 Main インスタンスを WebInterface クラスに参照として (おそらくコンストラクターで) 追加することです。

于 2012-10-23T10:35:43.773 に答える