Android HttpUrlconnection 未发布到 URL

Android HttpUrlconnection not posting to URL

我正在尝试从 android 模拟器提交表单,但它没有发布。我在浏览器中检查了 URL 并完成了表单,它向 MySQL 中发布了一条新记录,但从 android 中没有。我一直在这里搜索相关线程,但找不到我的代码的问题,这就是我所拥有的 (我有互联网和网络访问权限)

        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.registration);
        Submit= (Button)findViewById(R.id.Submit);
        Submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DownloadFilesTask newtask = new DownloadFilesTask();
                newtask.execute("http://10.0.2.2:9999/api/registration");
            }

        });

    }
    private class DownloadFilesTask extends AsyncTask<String,Void,Boolean> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Boolean doInBackground(String... params) {


            try {
                TextView username,password;
                username= (TextView)findViewById(R.id.username);
                password=(TextView)findViewById(R.id.password);
                URL url = new URL("http://10.0.2.2:9999/api/registration");
                HttpURLConnection conn = (HttpsURLConnection) url.openConnection();
                conn.connect();
                conn.setReadTimeout(10000);
                conn.setConnectTimeout(15000);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "text/plain");
                conn.setRequestProperty("charset", "utf-8");
                conn.setDoInput(true);
                conn.setDoOutput(true);
                ContentValues values= new ContentValues();
                values.put("username", username.toString());
                values.put("password", password.toString());

                OutputStream os = conn.getOutputStream();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));
                writer.write(String.valueOf(values));
                writer.flush();
                writer.close();
                os.close();


                return true;
            }

            catch (Exception e) {
                e.printStackTrace();
                return false;

            }
        }

       // @Override
        protected void onPostExecute(Boolean result) {
if(result==true)
{
    Toast.makeText(Registration.this,"Success",Toast.LENGTH_LONG).show();
}
            else
{Toast.makeText(Registration.this,"Failed",Toast.LENGTH_LONG).show();}

        }
    }

底部的 Toast 总是失败。正如您从我的代码中看到的那样,我正在尝试插入用户名和密码。

这是我的logcat

java.lang.IllegalStateException: problem parsing idx 1
 at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:300)
at com.android.server.NetworkManagementService.getNetworkStatsUidDetail(NetworkManagementService.java:1282)
            at com.android.server.net.NetworkStatsService.performPollLocked(NetworkStatsService.java:831)
            at com.android.server.net.NetworkStatsService.updateIfacesLocked(NetworkStatsService.java:743)
            at com.android.server.net.NetworkStatsService.updateIfaces(NetworkStatsService.java:721)
            at com.android.server.net.NetworkStatsService.access[=13=]0(NetworkStatsService.java:128)
            at com.android.server.net.NetworkStatsService.handleMessage(NetworkStatsService.java:1633)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:137)
            at android.os.HandlerThread.run(HandlerThread.java:60)
     Caused by: java.io.FileNotFoundException: /proc/net/xt_qtaguid/stats: open failed: ENOENT (No such file or directory)
            at libcore.io.IoBridge.open(IoBridge.java:406)
            at java.io.FileInputStream.<init>(FileInputStream.java:78)
            at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:269)
            at com.android.server.NetworkManagementService.getNetworkStatsUidDetail(NetworkManagementService.java:1282)
            at com.android.server.net.NetworkStatsService.performPollLocked(NetworkStatsService.java:831)
            at com.android.server.net.NetworkStatsService.updateIfacesLocked(NetworkStatsService.java:743)
            at com.android.server.net.NetworkStatsService.updateIfaces(NetworkStatsService.java:721)
            at com.android.server.net.NetworkStatsService.access[=13=]0(NetworkStatsService.java:128)
            at com.android.server.net.NetworkStatsService.handleMessage(NetworkStatsService.java:1633)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:137)
            at android.os.HandlerThread.run(HandlerThread.java:60)
     Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
            at libcore.io.Posix.open(Native Method)
            at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
            at libcore.io.IoBridge.open(IoBridge.java:390)
            at java.io.FileInputStream.<init>(FileInputStream.java:78)
            at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:269)
            at com.android.server.NetworkManagementService.getNetworkStatsUidDetail(NetworkManagementService.java:1282)
            at com.android.server.net.NetworkStatsService.performPollLocked(NetworkStatsService.java:831)
            at com.android.server.net.NetworkStatsService.updateIfacesLocked(NetworkStatsService.java:743)
            at com.android.server.net.NetworkStatsService.updateIfaces(NetworkStatsService.java:721)
            at com.android.server.net.NetworkStatsService.access[=13=]0(NetworkStatsService.java:128)
            at com.android.server.net.NetworkStatsService.handleMessage(NetworkStatsService.java:1633)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:137)
            at android.os.HandlerThread.run(HandlerThread.java:60)
06-23 21:38:17.729       78-228/system_process A/NetworkStats﹕ problem reading network stats
    java.lang.IllegalStateException: problem parsing idx 1
            at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:300)
            at com.android.server.NetworkManagementService.getNetworkStatsUidDetail(NetworkManagementService.java:1282)
            at com.android.server.net.NetworkStatsService.performPollLocked(NetworkStatsService.java:831)
            at com.android.server.net.NetworkStatsService.updateIfacesLocked(NetworkStatsService.java:743)
            at com.android.server.net.NetworkStatsService.updateIfaces(NetworkStatsService.java:721)
            at com.android.server.net.NetworkStatsService.access[=13=]0(NetworkStatsService.java:128)
            at com.android.server.net.NetworkStatsService.onReceive(NetworkStatsService.java:612)
            at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728)
            at android.os.Handler.handleCallback(Handler.java:605)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.os.HandlerThread.run(HandlerThread.java:60)
     Caused by: java.io.FileNotFoundException: /proc/net/xt_qtaguid/stats: open failed: ENOENT (No such file or directory)
            at libcore.io.IoBridge.open(IoBridge.java:406)
            at java.io.FileInputStream.<init>(FileInputStream.java:78)
            at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:269)
            at com.android.server.NetworkManagementService.getNetworkStatsUidDetail(NetworkManagementService.java:1282)
            at com.android.server.net.NetworkStatsService.performPollLocked(NetworkStatsService.java:831)
            at com.android.server.net.NetworkStatsService.updateIfacesLocked(NetworkStatsService.java:743)
            at com.android.server.net.NetworkStatsService.updateIfaces(NetworkStatsService.java:721)
            at com.android.server.net.NetworkStatsService.access[=13=]0(NetworkStatsService.java:128)
            at com.android.server.net.NetworkStatsService.onReceive(NetworkStatsService.java:612)
            at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728)
            at android.os.Handler.handleCallback(Handler.java:605)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.os.HandlerThread.run(HandlerThread.java:60)
     Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
            at libcore.io.Posix.open(Native Method)
            at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
            at libcore.io.IoBridge.open(IoBridge.java:390)
            at java.io.FileInputStream.<init>(FileInputStream.java:78)
            at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:269)
            at com.android.server.NetworkManagementService.getNetworkStatsUidDetail(NetworkManagementService.java:1282)
            at com.android.server.net.NetworkStatsService.performPollLocked(NetworkStatsService.java:831)
            at com.android.server.net.NetworkStatsService.updateIfacesLocked(NetworkStatsService.java:743)
            at com.android.server.net.NetworkStatsService.updateIfaces(NetworkStatsService.java:721)
            at com.android.server.net.NetworkStatsService.access[=13=]0(NetworkStatsService.java:128)
            at com.android.server.net.NetworkStatsService.onReceive(NetworkStatsService.java:612)
            at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728)
            at android.os.Handler.handleCallback(Handler.java:605)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.os.HandlerThread.run(HandlerThread.java:60)
06-23 21:38:19.079        78-90/system_process E/WindowManager﹕ Window Session Crash
    java.lang.IllegalArgumentException: Requested window android.os.BinderProxy@41598ea8 does not exist
            at com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:7163)
            at com.android.server.wm.Session.setWallpaperPosition(Session.java:360)
            at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:419)
            at com.android.server.wm.Session.onTransact(Session.java:111)
            at android.os.Binder.execTransact(Binder.java:338)
            at dalvik.system.NativeStart.run(Native Method)
 667-749/com.android.contacts E/DefaultVoicemailNotifier﹕ 
 No voicemails to notify about: clear the notification.

关于如何解决这个问题有什么建议吗?

首先注释 setDoInput

像 URL

一样转换您的内容值
String body = "?username=user&password=password"

然后写在URL

conn.getOutputStream().write(body.getBytes("UTF8"));

永远,永远不要在 doInBackground 中调用这些行:

TextView username,password;
username= (TextView)findViewById(R.id.username);
password=(TextView)findViewById(R.id.password);

切勿在 doInBackground 中与 UI 交互,而是使用 onPreExecute 和 onPostExecute。

body var是为了测试,如果你能得到contenvalues的字节,欢迎你。

别忘了打电话

conn.disconnect();