1

私はAndroid開発に不慣れで、共有設定を使用する必要がある1つの問題に固執しています。

Main.java

WebServiceInterface webinterface;

ProgressDialog progdial;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);

    handler     =   new Handler();
    webinterface=   new WebServiceInterface(wslogin);

    submit.setOnClickListener(new OnClickListener() {

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


        /*****
             * setting values in HASHMAP 
             * 
             * 
             */

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

            /*****
             * calling sendRequest() method in WebInterface class
             * 
             */
            webinterface.sendRequest(map);

    //for getting values from preferences
       SharedPreferences prefs = getSharedPreferences(prefName, MODE_PRIVATE);
         String getResponse = prefs.getString("responsevalue", "");
       //but its getting error as showing NULLPOINTERException. 
        System.out.Println("response is -----  " + getResponse);
//here i am getting null value for gerResponse. .....               
        }
    });
}

WebInterface.java (アクティビティではなくクラスのみ)

public class WebServiceInterface{


public WebServiceInterface(String getstring)
{       
    getWebServiceType = getstring;      
}

public void sendRequest(Map<String, Object> map) {
    // TODO Auto-generated method stub

    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();

  //calling webservice client to request webserivce code
    RestClient client = new RestClient(
            "http://**********************8");
    client.AddParam("username", username);
    client.AddParam("password", password);

    try {
        client.Execute(RequestMethod.POST);
    } catch (Exception e) {
        e.printStackTrace();
    }
      //getting response back from Restclient and saving in response string. 
    String response = client.getResponse();

   //for setting values in preferences
  SharedPreferences prefs = getSharedPreferences(prefName, MODE_PRIVATE);
     SharedPreferences.Editor editor = prefs.edit();
    editor.putString("responsevalue", response);
   editor.commit();


}

ここに私が直面している問題があります:
Main.java ファイルの onCreate ブロックの応答にアクセスしたいです。ボタン クリック メソッドの Main.java ファイルで、Webinterface クラスで取得する次の応答でトーストを表示する必要があります。

誰でもこれで私を助けてくれませんか。私はアンドロイド開発に慣れていないので、小さな助けがあれば幸いです。

以下はスタックトレースです..

10-29 13:07:44.042: I/global(379): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
10-29 13:07:44.062: D/AndroidRuntime(379): Shutting down VM
10-29 13:07:44.062: W/dalvikvm(379): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
10-29 13:07:44.072: E/AndroidRuntime(379): FATAL EXCEPTION: main
10-29 13:07:44.072: E/AndroidRuntime(379): java.lang.NullPointerException
10-29 13:07:44.072: E/AndroidRuntime(379):  at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
10-29 13:07:44.072: E/AndroidRuntime(379):  at com.leads.doctorgokhale.Interface.WebServiceInterface.call(WebServiceInterface.java:44)
10-29 13:07:44.072: E/AndroidRuntime(379):  at com.leads.doctorgokhale.Interface.WebServiceInterface.sendRequest(WebServiceInterface.java:39)
10-29 13:07:44.072: E/AndroidRuntime(379):  at com.leads.doctorgokhalenative.Main$2.onClick(Main.java:154)
10-29 13:07:44.072: E/AndroidRuntime(379):  at android.view.View.performClick(View.java:2408)
10-29 13:07:44.072: E/AndroidRuntime(379):  at android.view.View$PerformClick.run(View.java:8816)
10-29 13:07:44.072: E/AndroidRuntime(379):  at android.os.Handler.handleCallback(Handler.java:587)
10-29 13:07:44.072: E/AndroidRuntime(379):  at android.os.Handler.dispatchMessage(Handler.java:92)
10-29 13:07:44.072: E/AndroidRuntime(379):  at android.os.Looper.loop(Looper.java:123)
10-29 13:07:44.072: E/AndroidRuntime(379):  at android.app.ActivityThread.main(ActivityThread.java:4627)
10-29 13:07:44.072: E/AndroidRuntime(379):  at java.lang.reflect.Method.invokeNative(Native Method)
10-29 13:07:44.072: E/AndroidRuntime(379):  at java.lang.reflect.Method.invoke(Method.java:521)
10-29 13:07:44.072: E/AndroidRuntime(379):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-29 13:07:44.072: E/AndroidRuntime(379):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-29 13:07:44.072: E/AndroidRuntime(379):  at dalvik.system.NativeStart.main(Native Method)
10-29 13:07:44.143: D/dalvikvm(379): GC_FOR_MALLOC freed 3188 objects / 215024 bytes in 64ms
4

7 に答える 7

0

私の推測では、それprefNamenull. getResponse空の文字列のフォールバックを指定しているため、null にすることはできません。

于 2012-10-29T07:14:55.960 に答える
0

これを試して。

リレース

editor.putFloat("responsevalue", response); to below code

editor.putString("responsevalue", response);

文字列をフロートに追加して文字列を取得しようとしているため、エラーが発生します。

編集 :

初期化する前にsubmit(ボタンのonClickイベント)にアクセスしているので、初期化してください。username、password edit Text についても同じことを行います。

submit   = (Button)findViewById(R.id.submit);
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
于 2012-10-29T07:06:42.400 に答える
0

prefName は

SharedPreferences prefs = getSharedPreferences(prefName, MODE_PRIVATE);

妥当な値を保持していますか、それとも初期化されていない変数ですか?

于 2012-10-29T08:21:25.310 に答える
0

コード行の下に書く

editor.putString("responsevalue", response);

それ以外の

editor.putFloat("responsevalue", response);

onCreate()の後に以下のコードをメソッドに追加しますsetcontentview();

username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);

それはあなたの問題を解決します。

于 2012-10-29T07:09:46.743 に答える
0

使用する

putString

それ以外の

putFloat

于 2012-10-29T07:14:03.867 に答える
0

これを試して

SharedPreferences prefs = getSharedPreferences(prefName, MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    if (response == null)
        editor.putString("responsevalue", "response is null");
    else
        editor.putString("responsevalue", response);
    editor.commit();
于 2012-10-29T07:16:58.640 に答える