Android工作室getSlotFromBufferLocked:未知的缓冲区错误

我想做一个简单的login和注册应用程序,所以用户可以创build一个帐户。 (名称,用户名,密码)我使用WAMP和MYSQL数据库存储帐户。

当我填写registry单上的用户信息并点击注册时,出现以下错误:

09-14 09:30:39.864 2624-2638/com.example.appname.appname E/Surface﹕ getSlotFromBufferLocked: unknown buffer: 0xab7115e0 09-14 09:30:48.632 2624-2638/com.example.appname.appname E/Surface﹕ getSlotFromBufferLocked: unknown buffer: 0xab7125a0 09-14 09:30:51.940 2624-2638/com.example.appname.appname E/Surface﹕ getSlotFromBufferLocked: unknown buffer: 0xab7125a0 

当我去检查数据库它没有存储帐户。

MainActivity.java

 import android.app.Activity; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void userReg(View v) { startActivity(new Intent(this, Register.class)); } public void userLogin(View view) { } } 

Register.java

 import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; public class Register extends Activity { EditText ET_NAME,ET_USER_NAME,ET_USER_PASS; String name,user_name,user_pass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.register_layout); ET_NAME = (EditText) findViewById(R.id.name); ET_USER_NAME = (EditText) findViewById(R.id.new_user_name); ET_USER_PASS = (EditText) findViewById(R.id.new_user_pass); } public void userReg(View view) { name = ET_NAME.getText().toString(); user_name = ET_USER_NAME.getText().toString(); user_pass = ET_USER_PASS.getText().toString(); String method = "register"; BackgroundTask backgroundTask = new BackgroundTask(Register.this); backgroundTask.execute(method,name,user_name,user_pass); finish(); } } 

Backgroundtask.java

 import android.app.AlertDialog; import android.content.Context; import android.os.AsyncTask; import android.widget.Toast; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; public class BackgroundTask extends AsyncTask<String, Void, String> { AlertDialog alertDialog; Context ctx; BackgroundTask(Context ctx) { this.ctx = ctx; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... params) { String reg_url = "http://10.0.2.2.2/webapp/register.php"; String login_url = "http://10.0.2.2.2/webapp/login.php"; String method = params[0]; if (method.equals("register")) { String name = params[1]; String user_name = params[2]; String user_pass = params[3]; try { URL url = new URL(reg_url); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); OutputStream OS = httpURLConnection.getOutputStream(); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8")); String data = URLEncoder.encode("user", "UTF-8") + "=" + URLEncoder.encode(name, "UTF-8") + "&" + URLEncoder.encode("user_name", "UTF-8") + "=" + URLEncoder.encode(user_name, "UTF-8") + "&" + URLEncoder.encode("user_pass", "UTF-8") + "=" + URLEncoder.encode(user_pass, "UTF-8"); bufferedWriter.write(data); bufferedWriter.flush(); bufferedWriter.close(); OS.close(); InputStream IS = httpURLConnection.getInputStream(); IS.close(); return "Registration Success..."; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } @Override protected void onPostExecute(String result) { Toast.makeText(ctx, result, Toast.LENGTH_LONG).show(); } } 

register.php

 <?php require "init.php"; $name = $_POST["user"]; $user_name = $_POST["user_name"]; $user_pass = $_POST["user_pass"]; $sql_query = "insert into user_info values('$name','$user_name','$user_pass');"; if(mysqli_query($con,$sql_query)) { //echo"<h3> Data insertion success...</h3>"; } else{ //echo "Data insertion error..".mysqli_error($con); } ?> 

的init.php

 <?php $db_name="myDBname"; $mysql_user = "root"; $mysql_pass = "root"; $server_name="localhost"; $con = mysqli_connect($server_name,$mysql_user,$mysql_pass,$db_name); if(!$con) { //echo"Connection Error".mysqli_connect_error(); } else { //echo"<h3> Database connection success.....</h3>"; } ?> 

编辑:

这是Android中的一个错误,在稍后的版本的Marshmallow中被修复

原版的:

我相信这是具体的棉花糖。 你在使用棉花糖设备吗?

我注意到,每当我在应用程序之间切换(无所谓)或者退出应用程序,以及活动被破坏时,都会打印出这个错误。

我已经尝试在两个Nexus 5上运行相同的应用程序 – 一个运行棒棒糖和另一个棉花糖,这些日志打印只出现在棉花糖版本 – 每个应用程序,而不仅仅是我正在build设的。

不知道为什么会这样,但是我在这里打开了一个报告。

我没有具体问题的解决scheme。 但是我有类似的问题。 任何有这样的问题的人请确保你有下面的代码。

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.<YOUR_XML_FILE_NAME>); 

通过使用智能你可能会select下面的代码:

 @Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); setContentView(R.layout.<YOUR_XML_FILE_NAME>); } 

这对我有效

有关PersistentState的更多信息

快乐编码:)

我认为你在完成backgrounTask之前完成上下文,并且你传递的上下文不再存在。
你可以试试:

  • 使用appContext:new BackgroundTask(Register.this。getApplicationContext () );

  • 或者,等待BackgroundTask完成:在.execute(…)之后删除finish()并添加完成() onPostExecute

更新你的android操作系统到6.0.1。

这是在这里find的一个公开的问题。 这个问题在最近公开发布的Android 6.0.1中得到了修复。

这是相当奇怪的,但在我的情况下,我试图加载的联系人,而不是添加时出现此错误

<uses-permission android:name="android.permission.READ_CONTACTS" />

进入清单。 它消失了,只是我做到了。

所以我猜这可能是在棉花糖新权限的东西。

使用Android 6.0在我的Nexus 5上testing,在build.gradle中使用targetSdkVersion 23testing

由于该android更改权限请求(一些权限,如android.permission.READ_PHONE_STATEandroid.permission.READ_CONTACTS ),当您在运行时请求这些权限,并且不要添加权限标记( <使用权限android:name =“… “/> )在清单 ,你会得到错误。

因此,只需使用旧版本的标签权限,并在新版本的运行时添加请求权限即可。