0

AsyncTask クラスを使用して HTML リクエストをバックエンド サーバーの php ファイルに送信しようとしていますが、送信アクションを実行できません。いくつかのエラー メッセージが logcat に表示されます。問題を解決するためのアドバイスをお願いできますか?

以下は私の AsyncTask クラスです:

private class GrabURL extends AsyncTask<String, Void, Void>{

    ArrayList<NameValuePair> nameValuePairs;

    //private ProgressDialog Dialog;

    public GrabURL() { 
        nameValuePairs = new ArrayList<NameValuePair>(); 
        //Dialog = new ProgressDialog(Reader.this); 
    } 

    protected void onPreExecute(String key, String value) {
        mTest.append("PreExecute");
        //Dialog.setMessage("Sending value..");
        //Dialog.show();
        nameValuePairs.add(new BasicNameValuePair(key,value));
        }

    @Override
    protected Void doInBackground(String... urls) {
        // TODO Auto-generated method stub
        try{
            mTest.append("doinback");
            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost(urls[0]);
            UrlEncodedFormEntity ent = new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8);
            post.setEntity(ent);
            client.execute(post); 
         } catch (Exception e) {
             e.printStackTrace();
         }
        return null;
    }

    protected void onPostExecute(Void unused) {
        mTest.append("PostExecute");
        //Dialog.dismiss();
        Toast.makeText(getApplicationContext(), "Value updated", Toast.LENGTH_SHORT).show();
    }
}

外部クラスでこれを呼び出して送信アクションを開始します

grab.execute(new String[]{"http://192.168.1.150/myapp/check.php"});

ダイアログに関連するものを非表示にすると、エラー メッセージは表示されませんが、それでもサーバーと通信できません。

非表示にしない場合のエラー メッセージは次のとおりです。

07-19 15:11:29.360: E/WindowManager(26555): Activity android.reader.Reader has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@416dddc8 that was originally added here
07-19 15:11:29.360: E/WindowManager(26555): android.view.WindowLeaked: Activity android.reader.Reader has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@416dddc8 that was originally added here
07-19 15:11:29.360: E/WindowManager(26555):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:344)
07-19 15:11:29.360: E/WindowManager(26555):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
07-19 15:11:29.360: E/WindowManager(26555):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
07-19 15:11:29.360: E/WindowManager(26555):     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
07-19 15:11:29.360: E/WindowManager(26555):     at android.view.Window$LocalWindowManager.addView(Window.java:537)
07-19 15:11:29.360: E/WindowManager(26555):     at android.app.Dialog.show(Dialog.java:278)
07-19 15:11:29.360: E/WindowManager(26555):     at android.reader.Reader$GrabURL.onPreExecute(Reader.java:228)
07-19 15:11:29.360: E/WindowManager(26555):     at android.reader.Reader$1.onClick(Reader.java:102)
07-19 15:11:29.360: E/WindowManager(26555):     at android.view.View.performClick(View.java:3511)
07-19 15:11:29.360: E/WindowManager(26555):     at android.view.View$PerformClick.run(View.java:14105)
07-19 15:11:29.360: E/WindowManager(26555):     at android.os.Handler.handleCallback(Handler.java:605)
07-19 15:11:29.360: E/WindowManager(26555):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-19 15:11:29.360: E/WindowManager(26555):     at android.os.Looper.loop(Looper.java:137)
07-19 15:11:29.360: E/WindowManager(26555):     at android.app.ActivityThread.main(ActivityThread.java:4424)
07-19 15:11:29.360: E/WindowManager(26555):     at java.lang.reflect.Method.invokeNative(Native Method)
07-19 15:11:29.360: E/WindowManager(26555):     at java.lang.reflect.Method.invoke(Method.java:511)
07-19 15:11:29.360: E/WindowManager(26555):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-19 15:11:29.360: E/WindowManager(26555):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-19 15:11:29.360: E/WindowManager(26555):     at dalvik.system.NativeStart.main(Native Method)

以下は私のサーバー側プログラムのコードで、単純な php ファイルです。

<?php
    $file = "C:/wamp/www/myapp/file.txt";
    $data = "AID:".$_POST['A']." BID:".$_POST['B'];
    file_put_contents($file, $data);
?>
4

3 に答える 3

0

問題は、TextView と思われるものをdoInBackground()実行してUI を更新しようとしているようです。したがって、それを削除して、とmTest.append("doinback");から UI 要素を更新してみてください。onPreExecute()onPostExecute()

于 2012-07-19T06:55:56.887 に答える
0

Dialog.show()ログによると、実行はinで停止しpreExecute()ます。ロジックにまだ何か問題があるかどうかはわかりませんが、doInBackground()決して実行されません。

これを試して:

  • コンストラクター内で初期化を行います
  • Readerが呼び出しているアクティビティの名前であることを確認してくださいGrabURL

    private class GrabURL extends AsyncTask<String, Void, Void> {
    
    ArrayList<NameValuePair> nameValuePairs;
    private ProgressDialog Dialog;
    
    public void GrabURL() {
        nameValuePairs = new ArrayList<NameValuePair>();
        Dialog = new ProgressDialog(Reader.this);
    }
    
    protected void onPreExecute(String key, String value) {
        System.out.println("PreExecute");
        Dialog.setMessage("Sending value..");
        Dialog.show();
        nameValuePairs.add(new BasicNameValuePair(key, value));
    }
    
    @Override
    protected Void doInBackground(String... urls) {
        // TODO Auto-generated method stub
        try {
            System.out.println("doinback");
            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost(urls[0]);
            UrlEncodedFormEntity ent = new UrlEncodedFormEntity(
                    nameValuePairs, HTTP.UTF_8);
            post.setEntity(ent);
            client.execute(post);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    protected void onPostExecute(Void unused) {
        System.out.println("PostExecute");
        Dialog.dismiss();
        Toast.makeText(getApplicationContext(), "Value updated",
                Toast.LENGTH_SHORT).show();
    }
    }
    
于 2012-07-19T05:16:24.493 に答える
0

私はあなたのコードをチェックしました。サーバーエラーです。投稿は本来あるべきように機能していないと思います。チェックしてから AsyncTask に入れてください。

于 2012-07-19T05:02:22.297 に答える